custom-components / remote_homeassistant Goto Github PK
View Code? Open in Web Editor NEWLinks multiple home-assistant instances together
License: Apache License 2.0
Links multiple home-assistant instances together
License: Apache License 2.0
I have a remote HASS.IO installation with a usb Z-Wave stick and some nodes. I see all the data correct in the master.
But when I try to switch on or off a z-wave device from the master nothing happens..
What can be wrong?
I think I don't see anything in a log-file but maybe I'm checking the correct log-file?
Hi,
I'm trying out your component on Hassio 0.98.4 in combination with a fresh remote HA instance with the same version.
When the remote instance has no ssl configured a connection seems to be established (at least no error in the log and the websocket connection counter increases on the remote instance.
Config in remote HA is like this:
http:
websocket_api:
Config in master HA instance is like this:
remote_homeassistant:
instances:
- host: <hostname>
port: 8124
secure: false
access_token: !secret hazwave_token
entity_prefix: "hazwave_"
subscribe_events:
- state_changed
- service_registered
- zwave.network_ready
- zwave.node_event
However, when I enable SSL on the remote instance and set "secure: true" on the master instance I only get repeated connection errors without further hints.
The config of the remote instance is like this:
http:
ssl_certificate: ssl/hassio.pem
ssl_key: ssl/hassio.key
websocket_api:
The HA web interface works as expected. Due to the imported root cert, the connection is trusted and green in Chrome.
Could it be that there is an issue when self-signed certificates are used?
Is there an option to ignore ssl warnings?
Thanks!
Hi!
I would like to use that custom component, but doesnt work on Hassio v0.94.3.
Below errors:
2019-07-08 11:52:27 WARNING (MainThread) [homeassistant.loader] You are using a custom integration for remote_homeassistant which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you do experience issues with Home Assistant.
2019-07-08 11:52:30 ERROR (MainThread) [homeassistant.setup] Setup failed for remote_homeassistant: No setup function defined.
remote connected
The sensor state is from that time (connected and ago time are the same)
After that nothing happens. On the remote machine the sensors get updated
Here is my config
remote_homeassistant:
instances:
- host: 192.168.1.78
port: 8123
access_token: !secret slave_token
entity_prefix: slave_
include:
domains:
- sensor
It is not clear what needs to be done on the main host connecting out and or the remote host authentication-wise or if anything is needed at all.
Can you please update the readme to include an installation step by step and on what host steps are performed?
Does the remote_homeassistant module get installed on both the main and remote HA hosts?
Firstly, this component seems like a true miracle after messing around with socat, ser2net and usbip for what seems like forever, so, thank you!
I'm having an issue with with it when I start the homekit component. I have homekit disabled on startup, but when I run homekit.start, I immediately see the following in the log:
019-10-30 18:36:54 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved Traceback (most recent call last): File "/config/custom_components/remote_homeassistant/__init__.py", line 264, in _recv callback(message) File "/config/custom_components/remote_homeassistant/__init__.py", line 387, in fire_event self._entities.remove(entity_id) KeyError: 'persistent_notification.config_entry_discovery'
After that, I might be able to switch one or two devices on or off (status might update in master hassio or homekit, mainly doesn't) before the devices on the remote instance stop being controllable from the master (locally and through homekit control).
I'm using the current version. I've tried changing the default port, but get the same result. Also tried removing all subscribe events, same result.
I'm seeing this behaviour in homeassistant version 0.100.3 & 0.101.0.
My config:
remote_homeassistant:
instances:
- host: !secret usb_ip
port: 8234
access_token: !secret usb
entity_prefix: "usb_"
include:
domains:
- sensor
- switch
- group
- light
- climate
subscribe_events:
- state_changed
- service_registered
- zwave.network_ready
- zwave.node_event
Is there anything I'm missing?
Hello,
Ive tried to get a setup running where 2 instances of hassio connect together, but while i have to restart one instance to get the custom component running, the second instance only has the entities but doesnt get new state changes - the one last rebooted works great but the other doesnt.
is there a trick or something in the readme im missing for that behavior?
Greetings to all of you:)
How can I turn off or exclude zone from remote hass? thanks
I've come to love HACS (Home Assistant Community Store) for managing my custom components. Would you be willing to restructure the repo to support it?
Documentation:
https://hacs.netlify.com/developer/integration/
Hi,
so for two instances of HA, I setup as custom_components remote_homeassistant.
config is super simple but access_token is required and when I created on master latest version HA and on remote I get on slave - remote request with invalid auth
Could someone explain why is this...
I don't know if this could be considered an issue but I don't understand how to make this work.
I read, once, twice, ten times the instructions... Still
I added the integration using HACS but if I go to Configuration->Integration and press + there's no integration with the 'remote' word in its name
As far as I understand, the slave Home Assistant machine is already a server which answers requests from the main one, the master.
If so, do I still have to add
websocket_api:
in the slave machine configuration.yaml ? as stated in https://www.home-assistant.io/integrations/websocket_api/
I found (2) while I was looking for the port number of the websocket, where do I find it ? If it's 8123, why would I change this port on a standard Home Assistant install. If it's the standard Home Assistant port number, not once it is mentioned "if ever you changed HA's port number you can specify your specific port number" the readme only says port number as if everybody knows what is the websocket api port number.
Nohting in the readme says that the configuration should be added to the master configuration.yaml file (and even writing this I'm still not sure of it)
So please, be kind enough to write a few lines with very clear instructions on
Thanks for your help
Regards
Vart
All entities synced perfectly when first set up the config and when I restart the server. However, after some time (sometimes an hour, sometimes four), the states stop updating on the master. The values are accurate on my remote instance. I first noticed the issue with the climate domain, but from the history, I think all the remote entities stopped syncing at the same time.
What information would help narrow in on this issue?
In integrating my systems, I have many more entities which I would like to exclude than include.
It would be great to exclude specific domains and then list the particular entities I would like to include from those domains. I think it would make for a much smaller config file. In fact, I don't understand why there is an include section at all, if exclude takes precedence.
At the very least, include entities should take precedence over exclude domains.
Also, the acceptance of wildcards would be nice... Thank you for reading.
Get this error and a restart of the opposite end usually fixes things - but what causes it? Once it appears it doesn't resolve on its own.
Thanks! :
Hi,
I have this setup at two locations, one haster home assistant at a stable fiber WAN link and a "slave" home assistant at with a 4G mobile WAN link. Sometimes the 4G WAN links drops for some time and I think that is normal with mobile WAN links. Sometimes everything works when 4G WAN link is back but sometimes not.
Another case is that if I restart the slave home assistant device after for example changed some configuration the "remote entites" in the haster home assistant are not updated and the connection between them are lost.
The solution to get this connection up and running aging is to restart the master home assistant device and then everything is ok.
I am wondering if it is possible to implement some kind of heartbeat in this plugin so the master home assistant talk to the "slaves" regularly even if no event is sent between them. Then if that fail maybe try to reestablish the connection between them.
After sometime, my connection appears to be stuck closing. Any time I try to control the remote instance from my main instance, I receive the following error message:
�[36mhomeassistant_1 |�[0m 2018-12-21 13:03:29 WARNING (MainThread) [aiohttp.websocket] websocket connection is closing.
�[36mhomeassistant_1 |�[0m 2018-12-21 13:03:29 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
�[36mhomeassistant_1 |�[0m Traceback (most recent call last):
�[36mhomeassistant_1 |�[0m File "/config/custom_components/remote_homeassistant.py", line 235, in forward_event
�[36mhomeassistant_1 |�[0m await self._connection.send_json(data)
�[36mhomeassistant_1 |�[0m File "/usr/local/lib/python3.6/site-packages/aiohttp/client_ws.py", line 137, in send_json
�[36mhomeassistant_1 |�[0m await self.send_str(dumps(data), compress=compress)
�[36mhomeassistant_1 |�[0m File "/usr/local/lib/python3.6/site-packages/aiohttp/client_ws.py", line 125, in send_str
�[36mhomeassistant_1 |�[0m await self._writer.send(data, binary=False, compress=compress)
�[36mhomeassistant_1 |�[0m File "/usr/local/lib/python3.6/site-packages/aiohttp/http_websocket.py", line 630, in send
�[36mhomeassistant_1 |�[0m return await self._send_frame(message, WSMsgType.TEXT, compress)
�[36mhomeassistant_1 |�[0m File "/usr/local/lib/python3.6/site-packages/aiohttp/http_websocket.py", line 596, in _send_frame
�[36mhomeassistant_1 |�[0m self.transport.write(header + mask + message)
�[36mhomeassistant_1 |�[0m File "uvloop/handles/stream.pyx", line 671, in uvloop.loop.UVStream.write
�[36mhomeassistant_1 |�[0m File "uvloop/handles/handle.pyx", line 159, in uvloop.loop.UVHandle._ensure_alive
�[36mhomeassistant_1 |�[0m RuntimeError: unable to perform operation on <TCPTransport closed=True reading=False 0x557207f2a308>; the handler is closed
I've added some comments to the top of my custom component file so line 235 on my install is 229 in the repo.
I am receiving the above error while attempting to setup HA Remote, both instances are on 0.80.1
When installing the component via HACS, the version 2.1 is installed. This corresponds to the git tag from ~Nov 2019.
I encountered issues setting the component up until I found out that the installed version didn't match the master branch and lot of the issues were already fixed.
Everything works fine but in the master HAss I get the following error in my log constantly:
Unable to find referenced entities switch.table_lamp
I get this for each switch I have exposed from the remote HAss
It seems like it’s not properly updating state of my devices from my other instances. And if the instances aren’t started in the right order it would seem to complicate things there as well.
Is there a service or state somewhere I can track and restart my main instance if it can’t get proper status or something? Or send a notification maybe. Trying to track it down.
I generated the long term token and successfuly tried it manualy to get sensor data. But I am getting error when I setup this component. Am I missing something, please help.
2020-10-20 10:54:14 ERROR (MainThread) [custom_components.remote_homeassistant] Could not connect to ws://192.168.X.XX:8123/api/websocket, retry in 10 seconds...
my config:
remote_homeassistant:
instances:
- host: 192.168.X.XX
port: 8123
access_token: "token"
https://www.home-assistant.io/integrations/manual/
This integration partially works. I can see if the panel is armed or disarmed.
But I can not arm or disarm the alarm panel.
I get the following error.
Failed to call service alarm_control_panel/alarm_disarm. Service not found.
I was going to use this without any security at all, since I don't need it (you'd have to get past my pfSense and know the internal IP address to get to my Hass instances - they are not accessible from outside). It seemed to work, but nothing populated. Finally after a tip from @postlund I checked the master Hass log, and that said it couldn't connect without an API password or a token. Adding a token fixed it right away. But the sensor said “hytte pi remote connection 192 168 1 101 8123” and had this info:
192.168.1.101
port
8123
secure
false
verify ssl
true
entity prefix
hytte_pi_
Here's the tread about this:
https://community.home-assistant.io/t/master-ha-instance-with-multiple-slaves/109849/79?u=mastiff
Hi,
I run version 2.1 of your component - it's great.
But i've noticed a problem with calling sevrices via python script. It doesn't work, no errors in logs.
Same service call works ok from UI or directly from yaml.
Here is python snippet:
service_data_hvac = { 'entity_id': thermostat_entity }
[.....]
service_data_hvac['hvac_mode'] = 'heat'
hass.services.call('climate', 'set_hvac_mode', service_data_hvac)
In log i see that script was executed and there are no any errors.
2020-01-06 11:48:35 INFO (SyncWorker_18) [homeassistant.components.python_script] Executing set_proper_floor_heating_mode.py: {'thermostat_entity': ['climate.slave1_thermofloor_as_heatit_thermostat_tf_021_mode_2']}
Please help.
Hi guys,
I am trying to figure out what to do in order to make the addon functional in my setup. Do you have any clues on why it does not work? Thank you so much for all your help. This is what I did:
-I checked that I can access both HA instances from outside of the network. (I did this with the help of ZeroTier One. Both are in the same virtual network now along with a laptop from where I can access them. From my laptop I can ping both HA instances and I can also access them in the browser by going to their IP address as created in ZeroTier One)
-I installed HACS on both HA devices and installed remote_homeassistant in HACS
-I created an access token in the remote instance of HA.
-In the remote HA instance (I called ggs) in the configuration.yaml file I only added remote_homeassistant:
-in the main HA instance (I called home) in the configuration.yaml file I added the following:
remote_homeassistant:
instances:
- host: [IP_ADDRESS_of_REMOTE_Instance_provided_by_ZEROTIER_ONE]
port: 8123
secure: false
verify_ssl: true
access_token: !secret ggs_access_token
entity_prefix: "ggs_"
What else should I do?
Thank you once again for any help you can provide!
ygr
First of all - great component, saved me lot of work syncing my 2 instances very easy, thank you!!!!
I found that during restart of HA there is an exception in the code that causes timeout of restart service which stuck the process of HA,
I applied local fix for that which is very simple, would be great if you can add it to the offical component:
self._hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, stop)
send an argument that the stop
function is not receiving which causes an issue,event
argument and it solved it.async def stop(event):
async def _recv(self):
:aiohttp.WSMsgType.CLOSING
state to the if statement:if data.type in (aiohttp.WSMsgType.CLOSE, aiohttp.WSMsgType.CLOSED):
_LOGGER.error('websocket connection is closing')
break
async_connect
) the while loop is running always until there is an exception, the issue is when the AH is being restarted, it will try still to connect as long as the HA will disconnect all the sessions, during that time, the component's session can be terminated while it will keep retry to connect, the fix I applied for that was:self._is_shutting_down = False
in async_connect
I changed while True:
to while not self._is_shutting_down:
in def close
I added in the first line of the function:
self._is_shutting_down = True
I'm getting this issue....
Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/lib/python3.5/asyncio/tasks.py", line 239, in _step
result = coro.send(None)
File "/home/homeassistant/.homeassistant/custom_components/remote_homeassistant.py", line 158, in _recv
if message['type'] == api.TYPE_AUTH_OK:
AttributeError: module 'homeassistant.components.websocket_api' has no attribute 'TYPE_AUTH_OK'
So will open this as a new topic.
I have a master and slave instance connected and slave devices show up correctly on the master. I can see the correct state of my switches on my slave on the master, so if I switch to "on" on the slave this state mimics correctly on the master.
So all good except that I cannot operate the slave switches from my master. What would be the best way to investigate what is not working? When I try to switch from master the following appears in the log of the master:
Unable to find referenced entities switch.gardenpi_pool_lights
11:03:31 PM – helpers/service.py (WARNING) - message first occurred at 10:54:31 PM and shows up 3 times
Thanks a lot for your help!
Hi there,
Error during setup of component remote_homeassistant Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/setup.py", line 213, in _async_setup_component result = await task File "/config/custom_components/remote_homeassistant/__init__.py", line 109, in async_setup connection = RemoteConnection(hass, instance) File "/config/custom_components/remote_homeassistant/__init__.py", line 187, in __init__ self.set_connection_state(STATE_CONNECTING) File "/config/custom_components/remote_homeassistant/__init__.py", line 201, in set_connection_state self._hass.states.async_set(self._connection_state_entity, state, self._instance_attrs) File "/usr/src/homeassistant/homeassistant/core.py", line 1183, in async_set state = State( File "/usr/src/homeassistant/homeassistant/core.py", line 865, in __init__ raise InvalidEntityFormatError( homeassistant.exceptions.InvalidEntityFormatError: Invalid entity id encountered: sensor.remote_connection_https://domaine_duckdns_org_443. Format should be <domain>.<object_id>
my config yaml :
remote_homeassistant:
instances:
Any idea to fix this?
Thanks!
For some reason, the DuckDNS add-on on a remote hassio keeps turning off so, I’m trying to set up a backup system for my ‘remote_homeassistant’ component.
I set up an automation on the remote home assistant to email me its ip every x hours, and i have created an SMTP sensor to read the ip.
So now i have a sensor.remote_ip which is (almost) always up to date.
Unfortunatelly, i guess the component does not support templating so my following config does not work.
remote_homeassistant:
instances:
- host: {{states.sensor.ha_remote_ip.state}}
port: !secret ha_remote_port
secure: true
access_token: !secret ha_remote_access_token
entity_prefix: !secret ha_remote_entity_prefix
Is there any way to work around this?
I have a master instance which is where I have almost everything (automations, scripts, scenes, etc.). My secondary instance is where a zwave radio is being used to connect zwave devices. One such device is an Inovelli Dimmer Switch, which has a LED on it that can be used for custom notifications.
To make use of this LED, I need to call the zwave.set_config_parameter
service. I have done this successfully from my secondary instance (where zwave is configured), but (not surprisingly) my master instance doesn't know what the zwave.set_config_parameter
service is.
I tried adding zwave.set_config_parameter
to the list of subscribe_events:
in my master instance config, but that didn't seem to work.
Is there any way to expose the zwave.set_config_parameter
service to the master instance?
Thanks!
I connect to my HA server with a URL such as:
https://myha.server.com
with no port allowed in the URL. I do not know enough to modify and make a pull request. But I was able to solve the issue for myself by modifying lines 185 & 186 to remove the port:
return '%s://%s/api/websocket' % (
'wss' if self._secure else 'ws', self._host)
With this change, the connection works. I wonder (since I imagine I cannot be the only one with this connection type) if the default behavior could be that with no port specified in the config, then there is no port added to the host URL rather than defaulting to 8123.
Thanks!
I am not sure if this is a limitation of home-assistant-remote, or perhaps an issue on my end. However, I am unable to get a camera stream working on the master instance of my Home Assistant. The console shows the following error, basically a 404: https://pastebin.com/raw/EUP8dVYj
{code: "start_stream_failed", message: "Camera not found"}
camera.brz_side:1 GET https://ha-instance.com/api/camera_proxy_stream/camera.brz_side?token=XXXX 404
EDIT: Taking a closer look at the README, it seems that only remote states are populated? So no luck getting the camera working I assume.
After noticing a dropped websocket connection in the slave instance I saw this log in the master instance:
Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/config/custom_components/remote_homeassistant.py", line 206, in _recv
callback(message)
File "/config/custom_components/remote_homeassistant.py", line 291, in fire_event
state = message['event']['data']['new_state']['state']
TypeError: 'NoneType' object is not subscriptable
I just added the Zwave stick & zwave integration to the remote HA.
Hi!
This is a great component! Home Assistant Remote simplifies my setup immensely. Tip of the hat to the devs!
I have a question relating to media_player component.
Album artwork will not show in lovelace, but controlling media works just fine.
Primary and Secondary instance of the media_player show the same attributes and values:
Primary (media_player.vardagsrum_2)
volume_level: 0.21229049563407898
is_volume_muted: false
media_content_id: spotify:track:27Xlqkl3rtEzAOaN4VM7zd
media_content_type: music
media_duration: 202.306
media_position: 0.67
media_position_updated_at: 2020-07-23T06:54:11.329444+00:00
media_title: I Really Want It
media_artist: A Great Big World
media_album_name: Is There Anybody Out There?
app_id: CC32E753
app_name: Spotify
entity_picture_local: /api/media_player_proxy/media_player.vardagsrum_2?token=
friendly_name: Vardagsrum
entity_picture: https://i.scdn.co/image/ab67616d00001e02554488d0c51967b1654d8ce5
supported_features: 21439
Secondary (media_player.vardagsrum_2)
volume_level: 0.21229049563407898
is_volume_muted: false
media_content_id: spotify:track:27Xlqkl3rtEzAOaN4VM7zd
media_content_type: music
media_duration: 202.306
media_position: 0.67
media_position_updated_at: 2020-07-23T06:54:11.329444+00:00
media_title: I Really Want It
media_artist: A Great Big World
media_album_name: Is There Anybody Out There?
app_id: CC32E753
app_name: Spotify
entity_picture_local: /api/media_player_proxy/media_player.vardagsrum_2?token=
friendly_name: Vardagsrum
entity_picture: https://i.scdn.co/image/ab67616d00001e02554488d0c51967b1654d8ce5
supported_features: 21439
Artwork shows just fine on Primary, but not on Secondary. It's just blank/orange. but interestingly album art shows up in "more-info" . Anyone had similar issues or ideas as to how to make artwork display properly?
Thanks in advance
Hi,
I've updated my file and uncomment my old configuration and I get this error. Running on 0.80.0b3
Thanks
Hahahaha...
Just pointed a master at slave, and slave at master without filtering out itself... yeah... I know... it made sense in my head at the time...
Think I killed like 3 kittens just now...
for some reason having a hard time to se connection when using https:,i have tried almost everything and the erro is always same, when i tried local was no problem
remote_homeassistant:
instances:
- host: https://xxxxxxxxxxxx.duckdns.org:8123
port: 8123
secure: false
verify_ssl: false
access_token: !secret test
entity_prefix: "slave_"
subscribe_events:
- state_changed
- service_registered
dont matter what i do the erro is always same
Could not connect to ws://xxxxxxxxxxxxxxxxxxxx.duckdns.org:8123:8123/api/websocket,
Hi, i would be nice to have a sensor indicating the state of connection with remote HA.
BTW Thank you for very useful component :)
Hey,
I'm using this component without a prefix.
Is there some way to filter out a specific entity to not be passed to my master HA?
Specifically group.all_switches which causes problems in my master HA.
Thanks in advance.
Lukas
When adding this... I add this to both the master and slave instances correct?
What do I setup on the remote HA instance for it to allow the master to talk to it?
Can someone help me to link it ?
Thank you!
my log:
`
Logger: custom_components.remote_homeassistant
Source: custom_components/remote_homeassistant/init.py:176
First occurred: 16:54:39 (133 occurrences)
Last logged: 17:23:22
Could not connect to ws://10.0.50.50:8123/api/websocket, retry in 10 seconds.`
my cofing:
`
remote_homeassistant:
instances:
I have my master set up at my house and remote location is 700 miles away. For all my "Home" cards that are location based, such as my Home/Away status, sunset, sunrise are reporting as if from remote location.
Even though I am home with my phone, on my Home panel, it shows me as "Away". My sunset/sunrise time on my Home panel shows the sunset/sunrise time of the remote location.
Can this be solved by excluding some entities from coming from the remote location? Or is there something I ca put in config file to stop this from happening?
Other than this small issue - everything is working great. Love the functionality.
Thanks!
Trying to make a connection through Nabu Casa. Doesn't work.
Both master and instance are running Nabu Casa with different accounts
Error is
Could not connect to ws://xxxxxxxxxxxxxxxxxx.ui.nabu.casa:8123/api/websocket, retry in 10 seconds...
When I connect using local IP there ar no problems
Anybody help, please
Hi, thanks for the nice component, very useful for me.
I have temperature and humidity sensors that update every 60 seconds on another HA instance. Locally, they work fine.
But values are not updated consistently on my main HA machine. Sometimes it takes 15-30 minutes before they get updated.
I'm connected to my remote instance, the binary sensor shows connected, but my sensors aren't updating. Is there any other way, besides the sensor, I can see why things aren't working? The remote assistant pointing the OTHER direction is working a treat, sensors ARE updating.
Is it perhaps not possible to have two remote assistants working bidirectionally?
Cheers
Hi @lukas-hetzenecker,
First off all nice pice of work. You saved my from hours or doing mqtt switches :)
I will cut to the chase:
In the remote site I have covers on z-wave. They import fine show the status and everything.
The problem is that on the host itself I don't have any "native" covers configured. And when I try to controll a cover I get a error in the web UI:
Cant find service cover/open.
I will try to make one mqtt cover and see if this resolves the problem. the master HA should load the cover service at this point.
KR
Dawid
Hi,
I'm regularly (several times a day) seeing this message in the log of my master instance.
Is this related to home-assistant-remote?
Client exceeded max pending messages [2]: 512
11. September 2019, 21:19 components/websocket_api/http.py (ERROR) - message first occured at 11. September 2019, 20:33 and shows up 2 times
Thanks
Since version 0.106.x i get warinings in HA logs like:
2020-03-09 00:15:46 WARNING (MainThread) [homeassistant.helpers.service] Unable to find referenced entities switch.slave2_shenzhen_neo_electronics_co_ltd_wall_switch_1_channel_switch_5
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.