mruettgers / smlreader Goto Github PK
View Code? Open in Web Editor NEWESP8266 based smart meter (SML) to MQTT gateway
License: GNU General Public License v3.0
ESP8266 based smart meter (SML) to MQTT gateway
License: GNU General Public License v3.0
Hi!
The ESP opens a Accesspoint everytime I stored the Config.
` ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
vbc204a9b
~ld
Setting up 1 configured sensors...
Initializing sensor 1...
Initialized sensor 1.
State of sensor 1 is 'WAIT_FOR_START_SEQUENCE'.
Sensor setup done.
Setting up WiFi and config stuff.
Adding parameter MQTT server.
Adding parameter MQTT port.
Adding parameter MQTT username.
Adding parameter MQTT password.
Adding parameter MQTT topic.
Config size: 685
Wrong config version.
Missing or invalid config. MQTT publisher disabled.
Setup done.
AP password was not set in configuration
State changing from: 0 to 1
Setting up AP: SMLReader
With default password:
AP IP address: 192.168.4.1
State changed from: 0 to 1
Connection to AP.
Request for detectportal.firefox.com redirected to 192.168.4.1
Request for www.msftconnecttest.com redirected to 192.168.4.1`
Hello,
after uploading the project I've connected to the AP and entered the WIFI values, and MQTT password and so on. All fields were correctly filled and I received the message "Configuration saved. Please disconnect from WiFi AP to continue!". After Restart of the ESP I received the following Info in the debug window:
Initializing sensor 1...
Initialized sensor 1.
State of sensor 1 is 'WAIT_FOR_START_SEQUENCE'.
Sensor setup done.
Setting up WiFi and config stuff.
Adding parameter MQTT server.
Adding parameter MQTT port.
Adding parameter MQTT username.
Adding parameter MQTT password.
Adding parameter MQTT topic.
Config size: 749
Wrong config version.
Missing or invalid config. MQTT publisher disabled.
Setup done.
AP password was not set in configuration
State changing from: 0 to 1
Setting up AP: SMLReader
With default password:
AP IP address: 192.168.4.1
State changed from: 0 to 1
Connection to AP.
And I can't connect to the ESP by WIFI.
When I upload the precompiled version then it works as expected...
What could be wrong there?
Thanks for your help!
Hallo,
wäre es möglich folgendes anzupassen?
smartmeter/mains/sensor/1/obis/1-0:1.8.0/255/value 3546245.9
smartmeter/mains/sensor/1/obis/1-0:2.8.0/255/value 13.2
smartmeter/mains/sensor/1/obis/1-0:1.8.1/255/value 0.0
smartmeter/mains/sensor/1/obis/1-0:2.8.1/255/value 13.2
smartmeter/mains/sensor/1/obis/1-0:1.8.2/255/value 3546245.9
smartmeter/mains/sensor/1/obis/1-0:2.8.2/255/value 0.0
smartmeter/mains/sensor/1/obis/1-0:16.7.0/255/value 451.2
Also den Pfad der Übertragenden Daten? Bei IOBroker nimmt er leider jeden . als neuen Unterordner für den Datenpunkt.
Das heißt er erstellt eine ewiglange Struktur. Habe mal ein Bild angehangen.
I only get the infomation that the SMLReader in online and connected but there a no more data points available.
I flashed the SMLReader_D1mini_v2.1.5.bin,
then I connected the ESP to my WiFi and setup the IP, User and Password of my MQTT in iobroker.
Do you have any idea what I did wrong?
Or do I have to connect it first to the smart meter and I will see the data points when the smlreader starts to send "real" data?
I will check it on Monday
Hello,
thanks for the programm! What is the standard sending intervall to the mqtt server and is there a way to change it?
Thank you, great work!
Hello,
yesterday, I was able to read through your wiki but today, I'm not. It redirects to start page so it seems it is no longer available. As you did a commit yesterday, I suggest to check if you broken wiki with this.
Hello,
I wanted to ask carefully if there is the possibility to operate with a serial reading head like the "Hichi IR v1.1" similar to this one described here: https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-ttl-ausgang
Thank you very much and I would certainly leave a nice donation if this could be implemented into the code, if it isn't already.
is it correct that I just have to fill out the following lines in the config.h file for connecting to wifi sucessfully?
const char *WIFI_AP_SSID = "sfsdfsdfsdfsd";
const char *WIFI_AP_DEFAULT_PASSWORD = "545643563456435";
the device should work. It starts blinking typically if I place the sensor to the meter. But I can't find the device on my router and I get no mqtt messages to the broker :(
It'S a node mcu V3 ESP8266.
I have built a homeassistant glow hardware setup and found out that it is actually not working for smartmeters. :-(
https://github.com/klaasnicolaas/home-assistant-glow
Would it be possible to configure the SMLReader to also work with this?
I have flashed the Wemos D1, also receiving the MQTT message.
But no values. I also recompiled the firmware with the D6 pin.
Any ideas? Thanks for the great project!
Kay
just want to say that I am using this succesfully with
ISKRA MT681
maybe you can add it as supported power meter
Help is needed!
Hello,
thank you for sharing this project!
I wanted to use the RX pin, but I don't get any data. The head is working for sure, since I used it with esp-link. Also, the LED flashes. On mqtt-side, I get the "Hello" message, but no data from my EMH meter.
Does this pin not work for your software? Have I chosen the wrong pin name?
Compilation tells me success.
Regards, Dieter
Hi Michael,
thanks for publishing this project! We will get an electronic power meter installed during the next weeks, and I already have everything prepared, including a 3d printed IR head etc.
Currently, I use an Atmega128 controller to receive impulses from our gas meter (reed sensor), water meter (reflex light sensor) and ferraris energy meter (green led+photo transistor). Since the water and gas meter will not be changed, it would be nice to connect those sensors to the Wemos module to get an output by mqtt.
Unfortunately, there is no periodic output from those meters when there is no or very low consumption. Right now, I use a fixed interval and I output how many pulses have been detected during that time but this is not good for live monitoring.
I can think of 3 ways to do this:
I am looking forward to reading your thoughts on this.
Regards,
hamster 65
Would it be possible, to mention somewhere on the config page, that this device is running the SMLReader firmware? Ideally with a link to the github repository? This would make it easier to identify the device, especially if it's running as stable as SMLReader and doesn't need any attention for several months.
To some of you this may appear as a first world problem, but as I have a bunch of devices like these in my home meanwhile, sometimes it's not that easy to remember, which of them is running what kind of firmware, if they need some maintenance or if I want to check for updates.
Is it possible to use the OTA update provided by IOTWebConf to upload new/self compiled firmware versions?
Hi,
thanks for your Project.
After I finally managed to compile it (the release binary is a little older ;) and it worked, I realized that a function to monitor the Device (Readout) would be nice.
Could one also set a timeout from reading the SML telegram via MQTT?
The LWT is good if the ESP dont work anylonger, but dont tell anything about the Meter.
So over one minute no new telegram -> error.
I saw in the code : DEBUG("Did not receive an SML message within %d seconds, starting over.", READ_TIMEOUT);
but I have no clue how to publish this in MQTT ( A simple "error" "noerror" would be better anyway).
Maybe thats an easy one for you to add.
Danke
Hallo,
ich habe bisher einen ISKRA Zähler im Einsatz gehabt. An diesem funktionierte der Sensor hervorragend.
Jetzt habe ich - nach einem Zählerwechsel - einen Itron Zähler. Offenbar empfängt der Sensor weiterhin daten jedoch nicht die, die nüzlich sind. Ich benötige ja den momentanen Verbrauch. Ich bekomme per MQTT aber nur folgendes:
4000 qos : 0, retain : false, cmd : publish, dup : false, topic : strom/smartmeter/sensor/1/obis/1-0:2.8.0/255/value, messageId : , length : 56, Raw payload : 52484848 0 qos : 0, retain : false, cmd : publish, dup : false, topic : strom/smartmeter/sensor/1/obis/1-0:1.8.0/255/value, messageId : , length : 53, Raw payload : 48 0a 01 49 54 52 03 00 00 5a 35 qos : 0, retain : false, cmd : publish, dup : false, topic : strom/smartmeter/sensor/1/obis/1-0:96.1.0/255/value, messageId : , length : 83, Raw payload : 489732484932525732535232535032485132484832484832539732515332 ITR qos : 0, retain : false, cmd : publish, dup : false, topic : strom/smartmeter/sensor/1/obis/1-0:96.50.1/1/value, messageId : , length : 55, Raw payload : 738482
An was kann das liegen? Oder liegt es daran, dass ich noch keine PIN für den Zähler habe und er im Display lediglich den aktuelle Zählerstand anzeigt (und der ist gerade noch Null) und eben noch nicht den aktuellen Verbrauch?
Hi,
i have an ebz dd3 smart meter https://www.celle-uelzennetz.de/fileadmin/data/netze_documents/1_Kunde/Messwesen/eBZ_DD3_Betriebsanleitung_Kompaktzaehler.pdf
and i use this BPW 40
https://www.reichelt.de/fototransistor-npn-30v-100ma-0-1w-bedrahtet-bpw-40-p5806.html
because there is no bpw 40 in 3mm
I get only from the EPS8266
"Hello from 00C14A9B, running SMLReader version 2.2.0."
with phototransistor can i use?
i use the front info interface on the dd3 smart meter.
Please can you help me
Hello Michael,
thank you for your cool Project!
But i have a problem with my wlan credentials.
SSID: Aquarium
PASS: X{dfe5%-+xI_2%s"fd0v2}=$9{]z#[email protected]>\GhB*(&$?j6=2fw
SMLReader will not login to my accesspoint and do not publish something on my mqtt server.
If i use easyer login data like
SSID: Aquarium
PASS: asd123ASD
it will work.
Do you have a solution for that?
I tried to escape the " and the \
X{dfe5%-+xI_2%s\"fd0v2}=$9{]z#[email protected]>\\GhB*(&$?j6=2fw
but this also will not work...
Thank you for your help...
Best regards
Markus
Hi there,
I came across this repo today and couldn't wait to build. I used a Lolin D1 Mini Pro and a NPN photo Transistor I had laying around. Hooked everything up with 1k pullup as shown here on a breadboard
Flashing and setup went smooth, I see mqtt welcome messages.
But as soon as I place it in Front of my smartmeter, LED starts flashing when first package arrives. But D1 instantly turns off, even power LED turns off. I have to detach it from power to get it back running.
Any idea what causes the crash?
First of all thank you very much for the Code, it works very nice!
It would however be useful if you could add a Blacklist for OBIS Keys in the Config, that will not be published to MQTT.
For examlpe my Smartmeter (an EMH Gen-k) outputs a OBIS Value for the Private Key, which is in HEX format but because it is send in ASCII it wastes 143 Bytes (48 Bytes in HEX) each time the Smartmeter sends new values and this is quite unnecassary.
The OBIS Code is 129-129:199.130.5
, but I think it would be better to have an option with the abilitiy to add multiple keys in the Config.
The different OBIS Codes are mentioned in the manual on the pages 14-15.
Hi,
Can you explain what is the meaning of the MQTT topics
smartmeter/mains/sensor/1/obis/1-0:1.8.0/255/value 3546245.9
smartmeter/mains/sensor/1/obis/1-0:2.8.0/255/value 13.2
smartmeter/mains/sensor/1/obis/1-0:1.8.1/255/value 0.0
smartmeter/mains/sensor/1/obis/1-0:2.8.1/255/value 13.2
smartmeter/mains/sensor/1/obis/1-0:1.8.2/255/value 3546245.9
smartmeter/mains/sensor/1/obis/1-0:2.8.2/255/value 0.0
smartmeter/mains/sensor/1/obis/1-0:16.7.0/255/value 451.2
on my meter, I am getting the following values
Thanks in advance
AardvarkTCP.h dependency
The AardvarkTCP.h dependency is not a published library, or it is not anymore. I found it on Github, but it would be nice if it was maintained by PIO.
In order to minimize the power consumption of the WeMos board, it would be good to disable the blinking LED (this is already implemented in 'config.h').
It is also good to have the possibility to set the blinking frequency of the LED in 'config.h'
I think it isn't an issue but, I couldn't figure out what the login credentials for the web-interface are.
Thanks for your work!
Hello again,
i tried the programm with a self compiled and you finish generatet Binary. Both of them dosnt have a readout to my mqtt server. The only message is a "hello start up message" to my mqtt server.
I have a smart meter from Landis&Gyr the E320.
Actually i use a Wemos with Tasmota and the SML driver an this works perfectly. The only reason why its so important for me to use youre programm is the live sending intervall. My tasmota solution only send all 10 seconds. I control my photovoltaic system (grid tie inverter) with my server but 10 seconds to late for zero feed.
I use the serial monitorbut there are also no messages.
Would like to ask for a feature request to add a configurable value to set an interval in seconds for updating the mqtt topics.
My meter updates its values every 1-2 seconds. But for my use case, every 15 seonds is more then enough.
Thx
Scenario 1: After setting up everything and getting some results, I wanted to change the MQTT topic, I entered the local IP address of the SMLReader, then I changed the MQTT topic , then I clicked on 'Save'
Result: the SMLReader can not connect to the MQTT broker
Scenario 2: did the same as in scenario 1 and I also retyped the MQTT password, then clicked 'Save'
Result: the SMLReader do connect to the MQTT broker
Potential improvement: make sure that MQTT password is not lost by changing the configuration
Hello Michael,
i build the SMLReader, really great work you did
I read 2 Itron meters, both send their values each second, but i only send a MQTT message each 20 seconds
Now, after about 3 weeks, Reader2 values are only send very randomly, about 20 values per day, Reader1 works as expected
If i take Reader1 away from the meter, Reader2 behaves as expected
If i swap Reader 1 and 2, now Reader2 works as expected, Reader1 has the problem
My guess: the meters shifted a little in time they are sending out the values, now both send about the same time
SMLReader is busy with calculating Reader1, ignores Reader2
Could this be the problem?
Is it possible to ignore a Reader after a successfull reading for x seconds?
Hello,
first of all i like your project very much and thanks for sharing it !
Now my question:
I have two smartmeters and would like to read them simultaneously via two BPW40 transistors with one ESP.
Is this possible and if so what changes in the code do I have to make and how do I connect the second transitor to the ESP ?
hi is it work with iec62056-21
Hello,
I would like to report a BUG in the MQTT client of the SML reader which means that, for example after restarting the router, no more MQTT data is received from the MQTT broker. The SML reader can be reached via TCP, but the MQTT client no longer establishes the connection to the broker properly after the WLAN reconnects.
A restart of the SMLReader leads to success
Suggestion, simply close the MQTT client after the WLAN reconnects and reconnect if this is not already done?
Thanks in advance.
Hello,
how do I reset all settings? Are the settings kept, if I flash again?
Regards, Dieter
for security reasons and in order not have too many AP's around you, please add the possibility to disable the AP in the web configuration page
thanks for the code, it helped me to spot some strange electricity usage in my house.
any idea when the sleep mode will be implemented ?
my installation had to run on a power bank as there is no socket close to the meter.
I would be fine with one telegram every 300 seconds.
thanks !
Hi Michael,
thanks for building SMLReader and making it available to the public!
I've just set up my SMLReader with a selfmade IR head that was used with Volkszähler and a Raspberry Pi before. The meter is a DWS 7412.1.
Just to be clear:
power_current
is the currently consumed power?
power_out
is the overall consumption?
power_in
is produced power?
SMLReader receives data and the connection to my MQTT server works, but the readings MQTT receives are static:
iot/smartmeter/metric/power_current/value
is allways 27000
iot/smartmeter/metric/power_out/value
is allways 9223372036854775807 (should be arround 5760)
I noticed, that power_out
readings are going from 5460 to 54602362 to 546023624746 to 9223372036854775807 after boot.
Serial output is:
State is 'wait_for_start_sequence'.
Start sequence found.
State is 'read_message'.
End sequence found.
State is 'read_checksum'.
Message has been read.
----DATA----
1B 1B 1B 1B 01 01 01 01 76 05 48 32 66 04 62 00
62 00 72 63 01 01 76 01 01 02 31 0B 0A 01 44 5A
47 00 02 81 87 15 72 62 01 65 03 E7 DD A9 62 02
63 76 31 00 76 05 49 32 66 04 62 00 62 00 72 63
07 01 77 01 0B 0A 01 44 5A 47 00 02 81 87 15 07
01 00 62 0A FF FF 72 62 01 65 03 E7 DD A9 74 77
07 01 00 60 32 01 01 01 72 62 01 62 00 62 00 52
00 04 44 5A 47 01 77 07 01 00 60 01 00 FF 01 72
62 01 62 00 62 00 52 00 0B 0A 01 44 5A 47 00 02
81 87 15 01 77 07 01 00 01 08 00 FF 64 1C 01 04
72 62 01 62 00 62 1E 52 FF 65 03 6F A4 71 01 77
07 01 00 10 07 00 FF 01 72 62 01 62 00 62 1B 52
FE 53 99 36 01 01 01 63 0B 38 00 76 05 4A 32 66
04 62 00 62 00 72 63 02 01 71 01 63 A1 88 00 00
1B 1B 1B 1B 1A 01 4D F3
---END OF DATA---
State is 'process_message'.
Found metric 'power_in.'
Found metric 'power_current.'
Publishing message to 'iot/smartmeter/metric/power_in/value':
30000
Published metric 'power_in':
Value: 30
Unit: 98
Scaler: 0
Publishing message to 'iot/smartmeter/metric/power_out/value':
0
Published metric 'power_out':
Value: 5460236247467294720
Unit: 30
Scaler: -30
Publishing message to 'iot/smartmeter/metric/power_current/value':
27000
Published metric 'power_current':
Value: 27
Unit: 98
Scaler: 0
The readings in the serial output are static too.
Is the problem related to the scaler
? Why are power_out
and especially power_current
static?
I'm a mess in reading (or writing) code. That's why I'm asking here instead of just read the code by myself.
Best reagrds und bleib gesund,
T
Not getting any further than Hello From XXX running SMlReader.
In the debug it is waiting for Sequence. Tried a couple of BPW 40 :(
Tried with Nodemcu and wemos d1
Hey,
sorry, I do not not if it's possible or how you can write personal messages to other people here.
Your project is great and I will adapet it to my grafana/inluxdb environement.
My question: Is there any similar project, which works without a database? I am interested just in showing the actual current consumption on a display with an esp32/8266 .
Or is there an ino-file which i could edit to add a display by myown? I am not able to work with the bin-files in that way. Or maybe it is easy to cenvert them?
omg! I am such a noob ;)
I updated to 2.2.0 today and since then the aedes mqtt broker crashes.
Apr 18 11:41:06 raspberrypi Node-RED[18988]: 18 Apr 11:41:06 - [error] TypeError: Cannot read property 'toString' of undefined
Apr 18 11:41:06 raspberrypi Node-RED[18988]: at Aedes.authenticate (/home/pi/.node-red/node_modules/node-red-contrib-aedes/aedes.js:172:68)
Apr 18 11:41:06 raspberrypi Node-RED[18988]: at ClientPacketStatus.authenticate (/home/pi/.node-red/node_modules/aedes/lib/handlers/connect.js:101:17)
Apr 18 11:41:06 raspberrypi Node-RED[18988]: at makeCallTwo (/home/pi/.node-red/node_modules/fastseries/series.js:150:3)
Apr 18 11:41:06 raspberrypi Node-RED[18988]: at release (/home/pi/.node-red/node_modules/fastseries/series.js:138:7)
Apr 18 11:41:06 raspberrypi Node-RED[18988]: at resultList (/home/pi/.node-red/node_modules/fastseries/series.js:125:3)
Apr 18 11:41:06 raspberrypi Node-RED[18988]: at Aedes.series [as _series] (/home/pi/.node-red/node_modules/fastseries/series.js:45:7)
Apr 18 11:41:06 raspberrypi Node-RED[18988]: at Immediate.init (/home/pi/.node-red/node_modules/aedes/lib/handlers/connect.js:83:17)
Apr 18 11:41:06 raspberrypi Node-RED[18988]: at processImmediate (internal/timers.js:466:21)
Apr 18 11:41:06 raspberrypi systemd[1]: nodered.service: Main process exited, code=exited, status=1/FAILURE
Hello,
I was playing around with your ESP based SML reader in comparison to a RasPi based solution.
Power values are reported correctly, but OBIS code 96.50.1 with the serial number is not properly decoded, only RAW HEX message is shown.
Via MQTT I get:
/sensor/1/obis/1-0:96.50.1/1/value ISK
/sensor/1/obis/1-0:96.1.0/255/value 0a 01 49 53 4b 00 05 39 7f b1
But serial number should be shown as: 87654321
Would be great if the decoding could be improved.
I would like to monitor the availability of the device by the last will. Thanks in advance! :-)
Hello,
I previously had a Raspbi with the volkszaehler.org solution installed. I used an USB-IR-Head (https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-usb-ausgang) for this.
I would like to use your solution on a Wemos D1 Mini.
My question: Do you think it would be possible that I just create a small adapter to connect 5V and Data and then use my old IR-Head OR would you recomment to just buy a BPW 40 and build a new one?
Thanks for your help.
Hello,
first of all thank you for providing SMLreader to the community! Worked fine immediately with the provided instruction for platform.io and my NodeMCU v2 + Hichi IR ttl!
I have the following issue: My EMH ED300L is providing the full data incl. power after entering the PIN. After 120 sec it jumps back to the reduced data set. After contacting my provider they confirmed that the option to activate full dataset constantly is not available due to an old software version which they do not want to update.
Now my thought was: Why not let my NodeMCU enter the PIN every ~120 sec. via the Hichi IR ttl.
It would require the transmitting IR-LED to be activated in a certain sequence (2x short, then depending on PIN code).
Do you have any recommendation on how to integrate that into the code?
Rough idea:
Would appreciate your thoughts and help!
Hi Michael,
thanks a lot again for your great work ::-)
My 2 Meters had been read out for 6 Months now without any issue
Now, more and more friends, as they also got new meters, want to see their power consumption
Most of these people have no home automation, are not familiar with programming
I give them a personal site on my webhostet volkszahler account, so they could see their power usage, they are totaly happy
Most of their meters send a message every second - several values
I don´t want the data getting that big
I know i could set the interval to like 60 seconds
But this always means a rebuild / reflash of the ESP
At the point of installation it´s very handy to see the ESP LED blinking / get a new MQTT Message each second, makes it easy to get the sensor in the right position, but after the proof of work i have to change that
Do you see any chance to implement a config-page-changeable send interval in near future?
Best regards
Klaus
Hi,
since version 5.0.4 of EspSoftwareSerial something changed and compile of SMLReader will fail.
See issue:
plerup/espsoftwareserial#123
Would you adjust the chnages in EspSoftwareSerial to your project? Or should we stay at [email protected] in platformio.ini?
When using homeassistant as automation backend you can use discovery queues to publish all sensor data. Hassio will do an autodiscovery and adds all needed sensordata to its internal sensor-object database.
example:
DEVICE = {
"name":"Pool Controler",
"uniq_id":"pool_controler",
"stat_t":"pool/poolcontroler",
"val_tpl":"{{value_json.status}}",
"dev":{
"name":"Pool Controler",
"sw":"0.1",
"mf":"Raspberry, Atlas Tentacle T3",
"mdl":"3b",
"ids":[
"pool_controler"
]
}
}
RTD_value = {
"name": "Pool RTD value",
"uniq_id": "pool_rtd_value",
"stat_t": "pool/poolcontroler",
"val_tpl": "{{value_json.RTD.value}}",
"dev": {
"ids": [
"pool_controler"
]
}
}
device_map = [
{"discovery_queue": "homeassistant/sensor/poolcontroler/device/config", "device": DEVICE},
{"discovery_queue": "homeassistant/sensor/poolcontroler/rtd_value/config", "device": RTD_value},
]
for dev in device_map:
client.publish(dev["discovery_queue"], json.dumps(dev["device"]))
This will create an device and an entity containing a temperature value in hassio. No manual configuration ist needet in hassio whith that function. The discovery data is sent one time when the app starts(mqtt setup function).
Would it be possible to get some kind of addon?
Kind Regards
Tobias
I'm trying to create SML Reader for ESP01, with the adjustment of platfomio.ini it worked so far, now at the start was problematic with WIFI. Only reflash via esptool worked, with platformio did not work.
After all problems now remains in the console at the status:
initializing sensor 1:
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.