o0shojo0o / iobroker.opendtu Goto Github PK
View Code? Open in Web Editor NEWAdapter for the OpenDTU project
License: MIT License
Adapter for the OpenDTU project
License: MIT License
Describe the bug
The adapter seems to constantly lose connection to the websocket. This is indicated firstly by the fact that messages keep appearing stating that it has reconnected and secondly by the fact that no new data keep appearing in the ioBroker. If you restart the adapter, everything works again.
Screenshots & Logfiles
`
opendtu.0 | 2023-05-21 16:24:04.479 | info | Connect to OpenDTU over websocket connection. |
---|---|---|---|
opendtu.0 | 2023-05-21 16:15:58.747 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 15:40:00.906 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 15:28:03.898 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 15:27:39.397 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 15:15:15.111 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 15:12:07.039 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 15:11:51.710 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 15:04:14.144 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:59:29.667 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:59:04.408 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:58:36.386 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:56:40.565 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:55:09.147 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:51:12.142 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:49:57.591 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:49:21.742 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:49:07.138 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:47:52.770 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:47:15.721 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:46:49.999 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:45:04.711 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:43:09.142 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:42:36.448 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:42:12.222 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:41:51.025 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:39:28.257 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:38:40.896 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:38:09.548 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:35:33.100 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:34:57.854 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:30:42.246 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:28:14.896 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:26:48.237 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:26:22.201 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:25:36.698 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:25:22.143 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:16:57.749 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:04:26.224 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:03:20.574 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:03:19.364 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 14:02:03.935 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:59:59.660 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:59:47.676 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:58:29.902 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:58:28.797 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:49:02.249 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:42:50.803 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:42:36.336 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:41:43.746 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:40:56.348 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:40:02.110 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:38:54.759 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:38:07.955 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:36:42.591 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:36:25.140 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:36:01.875 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:34:07.657 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:33:49.996 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:33:24.168 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:33:01.343 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:31:03.236 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:30:33.504 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:30:19.136 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:30:03.841 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:29:48.715 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:29:34.322 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:29:16.434 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:28:42.051 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:28:16.377 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:26:40.692 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:26:26.175 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:26:08.780 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:24:54.521 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:24:21.743 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:23:16.928 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:23:15.789 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:21:24.172 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:19:46.422 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:19:29.220 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:16:17.574 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:14:03.008 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:13:47.622 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:13:36.367 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:13:11.206 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:12:53.611 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:12:52.171 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:12:17.604 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:12:05.436 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:11:37.966 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:10:21.353 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 13:09:43.758 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 12:36:28.251 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 12:24:10.884 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 12:06:13.074 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 12:05:20.540 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 11:12:05.956 | info | Connect to OpenDTU over websocket connection. |
opendtu.0 | 2023-05-21 11:12:05.776 | info | starting. Version 0.1.4 (non-npm: o0shojo0o/ioBroker.opendtu#e760893cdfe7623bdfc9c250aa6ee40f197c0023) in /opt/iobroker/node_modules/iobroker.opendtu, node: v18.16.0, js-controller: 4.0.24 |
opendtu.0 | 2023-05-21 11:12:02.082 | info | Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason |
opendtu.0 | 2023-05-21 11:12:02.081 | info | terminating |
opendtu.0 | 2023-05-21 11:12:02.078 | info | Got terminate signal TERMINATE_YOURSELF |
` |
Versions:
Describe the bug
It is not a bug but a feature request.
I use openDTU onbattery (https://github.com/helgeerbe/OpenDTU-OnBattery) on my ESP32 which, in addition to the inverter related data, also has MQTT data points to report about status infos of the connected Victron Energy charging controller.
Would it be possible to include that data in this adapter, too?
They are reported using MQTT and a simple REST interface.
Versions:
seit zwei oder drei Versionen von openDTU sehe ich in der history der DP zu Power immer wieder 0W Werte, die natürlich nicht richtig sind. Und so weit ich das sehe auch nicht von der OpenDTU kommen, sondern wohl mit einem Missverständnis der beiden System untereinander zusammenhängen...
interessanterweise nur bei einem meiner beiden HMS...
keine 0W Werte wenn die Sonne scheint und OpenDTU >0W anzeigt
passiert derzeit jeden Tag sporadisch...
24.4.24
git work in progress
No response
Hallo,
kann es sein, dass sich die API der openDTU geändert hat? In websocketController.js wird versucht der livestatus aus /livedata zu beziehen. Laut API-Dokument von openDTU (https://github.com/tbnobody/OpenDTU/blob/master/docs/Web-API.md) scheint der korrekte Pfad jedoch /api/livedata/status zu sein.
Nachdem ist das probehalber mal entsprechend geändert habe konnte ich mit erfolgreich mit der openDTU verbinden.
Hat sich da noch mehr geändert? Bisher bekomme ich noch keine Daten über meinen Wechselrichter.
Viele Grüße,
Karsten
P.S.: ich bin gerade erst mit dem Wechselrichter gestartet und kenne mich somit nicht wirklich aus damit. Vielleicht habe ich auch einfach noch was übersehen.
P.P.S.: das exception Handling scheint noch Raum für Verbesserungen zu haben ;-)
Version: stable=0.0.0 (0 days old) => latest=0.1.7 (30 days old)
Installs: stable=0 (0%), latest=150 (37.22%), total=403
Click to edit
Great new adapter!!! Bring this to latest repo! Works good!
Describe the bug
Not really a bug - just a proposal - text "OpentDU IP-Adresse" might be more clear to understand than "Web-UI-Adresse"
Another proposal: Add some code to get an note for the user when adding something other than an "plain IP" e.g.:
this.log.info(IP address found in config: ${this.config.ipaddress}
);
// Validate IP address ...
if (!(/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(this.config.ipaddress))) {
this.log.error(You have entered an invalid IP address! ${this.config.ipaddress}
)
}
Versions:
Adapter Version 0.1.4
OpenDTU Version: v23.5.3
OpenDTU Chip: ESP32-D0WDQ5
IOBroker Adapter Log
2023-05-08 10:27:32.311 debug getDTUData axios error: Error: getaddrinfo ENOTFOUND http
2023-05-08 10:27:34.578 debug Websocket error: Error: getaddrinfo ENOTFOUND http
2023-05-08 10:27:34.578 debug Start try again in 1 seconds...
I noticed that the adapter is no longer registering correctly with OpenDTU (as seen in the screenshot). When I manually enter the username and password, everything works again. Unfortunately, it doesn't seem to work automatically anymore.
While testing, I also observed that the entered IP address in the adapter doesn't matter, it still turns green. However, in the OpenDTU section in ioBroker, nothing is displayed.
No response
No response
23.11.16
1.0.1
No response
Fehler im Log:
opendtu.0 | 2023-10-02 16:09:04.096 | error | SyntaxError: Unexpected token u in JSON at position 2339
opendtu.0 | 2023-10-02 16:57:05.134 | error | SyntaxError: Unexpected token u in JSON at position 6664
OpenDTU v23.9.18
ioBroker.opendtu: v1.0.0
No error in Log.
No response
23.9.18
1.0.0
opendtu.0 | 2023-10-02 16:09:04.096 | error | SyntaxError: Unexpected token u in JSON at position 2339
opendtu.0 | 2023-10-02 16:57:05.134 | error | SyntaxError: Unexpected token u in JSON at position 6664
Moin Denis,
erstmal vielen Dank für deinen wunderbaren Adapter für die openDTU. Ich muss hier bei mir mehrere openDTUs betreiben, da ich mit einer einzigen leider nicht alle verbauten Wechselrichter erreichen kann. Grundsätzlich funktioniert das mit deinem Adapter auch, nur eine Kleinigkeit stört mich und zwar ist es bisher nur möglich auf das Webinterface der zuerst installierten openDTU und ihrer Adapter-Instanz zuzugreifen, auf die zweite Instanz geht das, wegen des Fehlens eines entsprechenden OpenDTU-Buttons im iobroker-Menü leider nicht. Könntest du für jede installierte Adapter-Instanz auch ein solchen Button zu seiner WebGUI einbauen? Das wäre super, so könnte man direkt im iobroker bleiben um alle Instanzen zu konfigurieren.
LG Andreas
Hi o0shojo0o,
no error but enhancement question:
is it possible to get also the Event Log from the DTU into the Adapter?
For error actions in iobroker like sending error with Telegram.
v24.2.12
1.0.1
No response
Der Datenpunkt opendtu.0.total.yieldday wird nicht um 0 Uhr genullt, obwohl ich das so in openDTU eingestellt habe und im Dashboard von openDTU wird a auch korrekt um Mitternacht genullt.
Describe the bug
A clear and concise description of what the bug is.
I want to set the Watt from 600 to 500 via iObroker and it is not reflected in the opendtu. When i change it in the opendtu webpage it works
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
That the watt changes to 500
Screenshots & Logfiles
If applicable, add screenshots and logfiles to help explain your problem.
Versions:
Additional context
Add any other context about the problem here.
What do i do wrong? If more infos and testing are helpful, i am happy to provide them :)
Hallo zusammen, ich hab ein Problem mit dem Adapter und sowohl die neueste Firmware von opendtu geflasht, als auch das passende node.js drauf und die aktuelle Adapter Installation drauf. Das Problem trat auch mit einer älteren Firmware Version von opendtu schon auf, ich hatte gehofft, dass es mit der neuen Version gelöst wäre, aber nach ca 18 Stunden Betrieb ging das ganze schon wieder los: nach einer Weile ganz normalem Betriebs wird im Adapter eine unhandled exception geworfen und der Adapter Gerät dann in eine "restart loop", sodass iobroker den Adapter killt, nachdem 4-5 Mal in 1,5 min neu gestartet wurde.
Das logfile zu dem Fehler im Adapter in iobroker ist folgendes (nur eine "Fehlerinstanz", diese tritt dann mehrfach nacheinander auf). 2 hinweise noch zur Fehler Eingrenzung:
Mqtt ist in opendtu aus, zufriff läuft über http.
Im Kontext des Fehlers verändern sich die Namen der 2 verbundenen wechselrichter in der Webansicht und enthalten plötzlich seltsame Sonderzeichen oder werden komplett durch solche ersetzt.
Ein Ansatz könnte sein, dass es einen overflow beim opendtu gibt, der zb durch nicht geschlossene web connections Auftritt und durch den Adapter ausgelöst wird?
Würde mich sehr freuen, wenn ich einen Tipp von euch bekomme oder mit der Fehlerbeschreibung die Weiterentwicklung des Adapters unterstützten kann 🙂
Vielen Dank!
2023-04-18 12:56:52.639 error The id is empty! Please provide a valid id.
opendtu.0
2023-04-18 12:56:52.638 error Error: The id is empty! Please provide a valid id. at Utils.validateId (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/build/lib/adapter/utils.js:114:19) at Opendtu.extendObject (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/build/lib/adapter/adapter.js:1935:23) at /opt/iobroker/node_modules/@iobroker/js-controller-common/lib/common/tools.js:2126:16 at new Promise () at Opendtu.extendObjectAsync (/opt/iobroker/node_modules/@iobroker/js-controller-common/lib/common/tools.js:2125:16) at DataController.processInverterData (/opt/iobroker/node_modules/iobroker.opendtu/lib/dataController.js:23:36) at Opendtu.processMessage (/opt/iobroker/node_modules/iobroker.opendtu/main.js:163:28) at WebSocket. (/opt/iobroker/node_modules/iobroker.opendtu/main.js:142:18) at WebSocket.emit (node:events:525:35) at Receiver.receiverOnMessage (/opt/iobroker/node_modules/ws/lib/websocket.js:1184:20)
opendtu.0
2023-04-18 12:56:52.634 error unhandled promise rejection: The id is empty! Please provide a valid id.
opendtu.0
2023-04-18 12:56:52.616 error Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
Thanks for your well working ioBroker interface for the openDTU. Now i have add a 2nd instanz for a new "openDTU on Battery" to ioBroker. Is there a chance to get also MPPT Data (Victron) into ioBroker ? Up to now ther are only Data from Hoymiles.
Hallo,
bei der Inbetriebnahme von iobroker.opendtu mit der aktuellen Version der openDTU (v23.4.17) ist mir aufgefallen, das ich mit dem ursprünglichen Kennwort mit Sonderzeichen keine Verbindung herstellen konnte. Durch einen anderen Beitrag bin ich auf die Idee gekommen, dass es an dem Sonderzeichen liegen könnte. Nachdem ich das openDTU Kennwort entsprechend geändert hatte ging es dann. Das Problem scheint auf dieser Seite zu liegen, da sich der WebSocket in websocketController.js zuvor über eine ungültige URL beschwert hat.
Viele Grüße,
Karsten
values ac.phase_1.yieldday and yieldtotal are not updated in IOBroker anymore, most likely due to breaking changes in the API, see https://github.com/tbnobody/OpenDTU/releases/tag/v24.2.12
the inverters need to be asked individually by serial number now, instead of all at once.... see tbnobody/OpenDTU@c27ecc3
No response
No response
24.2.12
1.0.1
No response
Describe the bug
Spannung, Storm und Leistung werden manchmal mit 0 zurück gegeben, wodurch einige Daten fehlen im Graph
To Reproduce
Steps to reproduce the behavior:
kommt immer wieder sporadisch
Expected behavior
Screenshots & Logfiles
If applicable, add screenshots and logfiles to help explain your problem.
Versions:
Additional context
Also bei OpenDTU habe ich die Version (SDK v4.4.3, Konfig 0.1.24, FirmgitHash 055eb3a). Was mir auffällt ist, dass ich über den Github Link für den Iobroker die OpenDTU Version v0.1.2 installiert bekomme, Du nutzt die v0.1.1. Ist das ggf. ein Problem? Ansonsten sind die ja doch überschaubaren Einstellungen identisch aber der Objektbaum leider leer =(
avialible steht auch auf false...
Ich mache vermutlich etwas falsch...
Originally posted by @DPO99 in tbnobody/OpenDTU#700 (reply in thread)
Ein Beschreiben von power_on mit true schaltet den Inverter ein. Ein Beschreiben mit false schaltet den Inverter aus. Ist das so vorgesehen? Wozu ist der Datenpunkt "power_off"? Die beiden Datenpunkte sind offenbar keine "Taster" , wie erwartet. Wobei mir dieses Verhalten viel lieber ist!
Version 0.1.5
Nodejs: v18.16.1
Describe the bug
looks like "ioBroker.opendtu/admin /admin.d.ts" isn't needed anymore when using admin5+ methods for config screens
Expected behavior
I wanna propose to delete the file
Nach dem Neustart des Adapters wird der Name immer auf das Orginal geändert!
Bitte den Namen nicht ändern!
Versions:
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.