phifogg / iobroker.sainlogic Goto Github PK
View Code? Open in Web Editor NEWAn IoBroker Adapter for Sainlogic based weather stations
License: MIT License
An IoBroker Adapter for Sainlogic based weather stations
License: MIT License
Hallo, die Einbindung der Wetterstation hat soweit funktioniert, nur werden keine Min- und Max- Werte ausgegeben. In der Log wird dauernd die Fehlermeldung:
sainlogic.0 | 2021-04-27 19:09:18.268 | error | (27304) Scheduler received data for unkown command 85 subcommand 91
ausgegeben.
Wo liegt hier der Fehler - vielen Dank für die Hilfe
Version: stable=0.7.2 (NaN days old) => latest=0.6.1 (423 days old)
Installs: stable=44 (30.34%), latest=1 (0.69%), total=145
Click to edit
Wäre es vielleicht noch eine Idee, dass Du noch eine Weiterleitungsmöglichkeit der Rohdaten an einen zweiten (und ggf. dritten) Port und IP Adresse mit aufnimmst? Bin darüber auch gerade mit Oliver von Foshkplugin zugange, bekomme von Ihm seine 0.6 Beta zugesandt - diese hat dann diverse Weiterleitungsmöglichkeiten. Mein Workflow würde dann erstmal so aussehen:
WS-View: Custom Server Einstellung/Ecowitt Protokoll:
-> Eingang ins Foshkplugin, Umrechnung der Werte in Metrisch, aber auch Berechnungen/Zusätzliche Datenpunkte wie Hitzeindex, Luftdrucktendenz, etc.
Ausgang/Weiterleitung durch das Generic Foshkplugin:
a) In den Iobroker, erledige ich noch über Node-Red
b) Weewx, hatte ich gerade eingerichtet
c) Was immer mir noch einfällt
Durch eine Weiterleitungmöglichkeit Deines Adapters, der in WS-View eingestellten Custom Server Einstellung, hätte man dann auch die Möglichkeit, weitere Wetterapps entsprechend ohne zusätzlichen DP-1500 Wetterdongle zu füttern...
value greater than max
State value to set for "sainlogic.0.weather.current.UVraw" has value "2094" greater than max "2000"
Jetzt wo das Wetter so schön ist laufen die Werte für UV raw über.
Example delivered on Ecowitt protocoll:
{"PASSKEY":"******",
"stationtype":"GW1000A_V1.5.9",
"dateutc":"2020-05-29 19:37:02",
"tempinf":"77.5",
"humidityin":"44",
"baromrelin":"29.288",
"baromabsin":"29.288",
"temp1f":"76.64",
"humidity1":"46",
"temp2f":"76.10",
"humidity2":"47",
"batt1":"0",
"batt2":"0",
"freq":"868M",
"model":"GW1000_Pro"}
While using "ecowitt" as protocol for my weather station I recognized that some datapoints are created even if there is no string defined for this datapoint.
For example UVraw and dewpointtemp.
The fastest, to implement, solution would be to check if there is a string definition for the protocol and if not, do not create the datapoint.
Since some weather stations might support different datapoints, even if the protocol is the same, the better solution would be an automatic detection and giving the user the possibility to select the desired datapoints.
A mid term solution could be to pre-define datapoint for known weather stations and fall back to default if the station is not recognized.
Hi enabling compact mode on your adapter is failing.
command i used:
iobroker compact sainlogic.0 enable
Kind regards
Holger
Hi Daniel!
Anbei die Daten des traffic für die Wetterstation, mein Handy hat die IP 10.0.0.26, die Wetterstation 10.0.0.35. Man erkennt gut die Kommunikation mit meinem Raspi (10.0.0.210) und WU. Ich hab im WS View den custom port editiert (Leerzeichen dazu und wieder weg); also keine Änderung. Die angehängte Datei hab ich um ".txt" erweitert, damit der upload klappt.
Ich bin gespannt, ob du was rausfindest!
Vielen Dank für deine Mühe!
LG Latzi
Wetterstation_Traffic.pcap.txt
Describe the bug
I just got my Froggit DP1500 + moisture sensors and followed the guide to get the data into my iobroker. Nothing happened in listener mode, nothing in scheduler mode. After changing the protocol to Ecowitt (instead of WeatherUnderground as described in the guide), the data started to show up.
To Reproduce
Follow the guide for a Froggit DP1500, iobroker v5.3.8.
Expected behavior
Either data should show up when using WeatherUnderground or the guide needs to mention Ecowitt instead. I'm not fully sure whether this may not be a bug in the DP1500, though.
Screenshots & Logfiles
If applicable, add screenshots and logfiles to help explain your problem.
Versions:
Additional context
Since stuff works now for me, no immediate action is required. However, if this is a bug in the guide or the adapter, this should be fixed or mentioned. In any case, thanks for the great work with this adapter!
Edit: Interestingly, the DP1500 seems to send the model string "GW1000A_Pro", which suggests an Ecowitt Gateway. Maybe that's the issue here.
At first I had problems with the installation of the Sainlogic adapter. It wasn't until I installed via GITHUB that the installation succeeded. I haven't bought a weather station yet. First I wanted to see if the adapter installation worked. It is unusual for the adapter not to show up in the instances. The adapter appears in the objects. Is this behavior normal for this adapter?
Hi,
it seems, that saintlogis does not update the objects:
saintlogic is version 0.8.1
Weatherstation is a WH2650A
Log:
2022-01-27 12:06:38.337 - info: host.iobroker "system.adapter.sainlogic.0" enabled
2022-01-27 12:06:38.498 - info: host.iobroker instance system.adapter.sainlogic.0 started with pid 41801
2022-01-27 12:06:40.218 - info: sainlogic.0 (41801) starting. Version 0.8.1 in /opt/iobroker/node_modules/iobroker.sainlogic, node: v17.4.0, js-controller: 3.3.22
2022-01-27 12:06:40.269 - info: sainlogic.0 (41801) Starting Scheduler
2022-01-27 12:06:40.271 - info: sainlogic.0 (41801) Scheduler call ws_getfirmware activated
2022-01-27 12:06:40.273 - info: sainlogic.0 (41801) Scheduler call ws_getcurrent activated
2022-01-27 12:06:40.273 - info: sainlogic.0 (41801) Scheduler call ws_getmax activated
2022-01-27 12:06:40.275 - info: sainlogic.0 (41801) Scheduler call ws_getmin activated
2022-01-27 12:06:40.275 - info: sainlogic.0 (41801) Scheduler call ws_getmaxdaily activated
2022-01-27 12:06:40.276 - info: sainlogic.0 (41801) Scheduler call ws_getmindaily activated
2022-01-27 12:06:40.282 - info: sainlogic.0 (41801) Starting Listener
2022-01-27 12:06:55.281 - info: sainlogic.0 (41801) Scheduler pulling for new data
2022-01-27 12:06:55.338 - error: sainlogic.0 (41801) Scheduler received data for unkown command 84 subcommand 49
2022-01-27 12:07:10.281 - info: sainlogic.0 (41801) Scheduler pulling for new data
2022-01-27 12:07:10.310 - error: sainlogic.0 (41801) Scheduler received data for unkown command 84 subcommand 49
2022-01-27 12:07:25.282 - info: sainlogic.0 (41801) Scheduler pulling for new data
2022-01-27 12:07:25.304 - error: sainlogic.0 (41801) Scheduler received data for unkown command 84 subcommand 49
2022-01-27 12:07:40.283 - info: sainlogic.0 (41801) Scheduler pulling for new data
2022-01-27 12:07:40.304 - error: sainlogic.0 (41801) Scheduler received data for unkown command 84 subcommand 49
Version: stable=0.5.6 (315 days old) => latest=0.6.1 (302 days old)
Installs: stable=12 (11.65%), latest=4 (3.88%), total=103
Click to edit
Hallo,
der Adapter starte nun ohne Fehlermeldung, jedoch kommen auch nach längerem warten keine Fehler an:
Ich kann aber auf dem Raspi das Verzeichnis /weatherstation/updateweatherstation.php nicht finden. Muss dies von Hand angelegt werden bzw. sollte diese im Stammverzeichnis oder unter /iobroker.sainlogic/ sein?
sainlogic.0 | 2021-03-14 17:42:01.449 | info | (11541) Starting Listener |
sainlogic.0 | 2021-03-14 17:42:01.448 | debug | (11541) Forward URL: |
sainlogic.0 | 2021-03-14 17:42:01.448 | debug | (11541) Listener protocol: wunderground |
sainlogic.0 | 2021-03-14 17:42:01.448 | debug | (11541) Listener path: /weatherstation/updateweatherstation.php |
sainlogic.0 | 2021-03-14 17:42:01.447 | debug | (11541) Listener port: 45000 |
sainlogic.0 | 2021-03-14 17:42:01.446 | debug | (11541) Listener IP: 0.0.0.0 |
sainlogic.0 | 2021-03-14 17:42:01.413 | info | (11541) starting. Version 0.6.6 in /opt/iobroker/node_modules/iobroker.sainlogic, node: v12.20.2, js-controller: 3.2.16 |
sainlogic.0 | 2021-03-14 17:42:01.103 | debug | (11541) statesDB connected |
sainlogic.0 | 2021-03-14 17:42:01.102 | debug | (11541) States connected to redis: 127.0.0.1:9000 |
sainlogic.0 | 2021-03-14 17:42:01.093 | debug | (11541) States create User PubSub Client |
sainlogic.0 | 2021-03-14 17:42:01.092 | debug | (11541) States create System PubSub Client |
sainlogic.0 | 2021-03-14 17:42:01.083 | debug | (11541) Redis States: Use Redis connection: 127.0.0.1:9000 |
sainlogic.0 | 2021-03-14 17:42:01.080 | debug | (11541) objectDB connected |
sainlogic.0 | 2021-03-14 17:42:01.071 | debug | (11541) Objects connected to redis: 127.0.0.1:9001 |
sainlogic.0 | 2021-03-14 17:42:01.047 | debug | (11541) Objects client initialize lua scripts |
sainlogic.0 | 2021-03-14 17:42:01.045 | debug | (11541) Objects create User PubSub Client |
sainlogic.0 | 2021-03-14 17:42:01.044 | debug | (11541) Objects create System PubSub Client |
sainlogic.0 | 2021-03-14 17:42:01.041 | debug | (11541) Objects client ready ... initialize now |
sainlogic.0 | 2021-03-14 17:42:00.998 | debug | (11541) Redis Objects: Use Redis connection: 127.0.0.1:9001 |
host.raspberrypi | 2021-03-14 17:41:59.781 | info | instance system.adapter.sainlogic.0 started with pid 11541 |
sainlogic.0 | 2021-03-14 17:42:01.449 | info | (11541) Starting Listener |
sainlogic.0 | 2021-03-14 17:42:01.448 | debug | (11541) Forward URL: |
sainlogic.0 | 2021-03-14 17:42:01.448 | debug | (11541) Listener protocol: wunderground |
sainlogic.0 | 2021-03-14 17:42:01.448 | debug | (11541) Listener path: /weatherstation/updateweatherstation.php |
sainlogic.0 | 2021-03-14 17:42:01.447 | debug | (11541) Listener port: 45000 |
sainlogic.0 | 2021-03-14 17:42:01.446 | debug | (11541) Listener IP: 0.0.0.0 |
sainlogic.0 | 2021-03-14 17:42:01.413 | info | (11541) starting. Version 0.6.6 in /opt/iobroker/node_modules/iobroker.sainlogic, node: v12.20.2, js-controller: 3.2.16 |
Der Datentransfer zu Wunderground funktioniert!
Gruß
Franz
Include option to automatically detect weather station
Dear Adapter developer,
Node.js 14 is now available for a year and Node.js 16 was release just some days ago and will become LTS by October 2021. We plan to update the ioBroker Node.js recommendation (currently 12.x) to 14.x later this year.
Please check your adapter with Node.js 14 especially, and ideally also directly with Node.js 16
Please add both versions to the adapter testing which is executed on commits.
If your adapter requires a certain minimum version of Node.js please set the 'engine' setting in package.json accordingly! Please also do this if the adapter is not able to work in certain Node.js versions, so that ioBroker can prevent users from installing te adapter if not compatible!
On questions please talk to us at ioBroker/ioBroker.js-controller#1138
Please close the issue after you checked it.
Thank you very much for your support!
Ecowitt allows more Parameter to be transferred
I have the GW1000 Gateway and 8 Moisture sensors.
The datapoints of all 8 sensors get updated every ~60 seconds.
It seems like they get updated even if they have no actual connection to the gateway. (e.g. out of battery, out of range,..)
Is there any information about the connection between the sensors and the gateway?
Hallo!
Ich habe gerade versucht die github version zu installieren. Keine Reaktion...
Hab dann den npm install über beliebige Quellen versucht. Wenigsten eine Reaktion mit abbruch. Das sagt das Log:
host.iobroker1 | 2020-07-03 16:11:56.651 | error | iobroker host.iobroker1 Cannot install https://www.npmjs.com/package/iobroker.sainlogic: 1 |
---|---|---|---|
host.iobroker1 | 2020-07-03 16:11:56.636 | info | iobroker npm ERR! A complete log of this run can be found in:npm ERR! /home/iobroker/.npm/_logs/2020-07-03T14_11_56_622Z-debug.log |
host.iobroker1 | 2020-07-03 16:11:56.620 | info | iobroker npm ERR! package.json Non-registry package missing package.json: https://www.npmjs.com/package/iobroker.sainlogic.npm ERR! package.json npm can't find a package.json file in your current dir |
host.iobroker1 | 2020-07-03 16:11:56.619 | info | iobroker npm ERR! code ENOPACKAGEJSON |
node: v10.16.3, js-controller: 3.1.6
Was mache ich falsch?
Groß
Lothar
Just installed sainlogic adapter v0.7.3.
The weatherstation is a WH4000SE
Following error appears in iobroker:
Scheduler connected to weather station run 255,255,11,0,6,4,4,25
sainlogic.0 | 2021-11-25 10:42:57.167 | error | Scheduler received data for unkown command 84 subcommand 49
sainlogic.0 | 2021-11-25 10:42:57.167 | debug | Data Command received: 84 subcommand 49
sainlogic.0 | 2021-11-25 10:42:57.167 | debug | FW Scheduler Received data string: 485454502f312e31203430302042616420526571756573740d0a436f6e6e656374696f6e3a20636c6f73650d0a0d0a
Version: stable=0.5.6 (316 days old) => latest=0.6.1 (303 days old)
Installs: stable=11 (10.78%), latest=4 (3.92%), total=102
Click to edit
Convert degrees to direction
Currently the adapter is maintained in German and English by myself. Other languages would be a benefit.
Raise your voice if you want to support translating it.
As the weather data is coming in via Listener or Scheduler it is important to check when the last update came in. In case of missing updates an error has to be raised.
When I try to install the adapter from iobroker admin guy, I receive following error
$ ./iobroker add sainlogic --host iobroker
NPM version: 6.14.12
npm install [email protected] --loglevel error --prefix "/opt/iobroker" (System call)
npm ERR! code ETARGET
npm ERR! notarget No matching version found for [email protected] ERR! notarget In most cases you or one of your dependencies are requestingnpm ERR! notarget a package version that doesn't exist.
npm ERR! A complete log of this run can be found in:npm ERR! /home/iobroker/.npm/_logs/2021-08-01T16_11_04_120Z-debug.log
ERROR: host.iobroker Cannot install [email protected]: 1
ERROR: process exited with code 25
the corresponding log
2021-08-01T16_11_04_120Z-debug.log
Version Info
iobroker.admin V4.2.2
Node.js: v10.24.1
NPM: 6.14.12
This is not a Bug. Its a Feature Request.
The WS2900_V2.01.08 allows me to use a custom Server. I use my Server for this. In my Server I got the following JSON, which I would like to relay to this Adapter. When I just Post the Data to the HTTP-Endpoint, nothing happens but I got a 200 StatusCode.
{"PASSKEY":"something","stationtype":"EasyWeatherV1.5.8","dateutc":"2021-06-14 19:28:11","tempinf":"73.9","humidityin":"57","baromrelin":"29.864","baromabsin":"30.142","tempf":"61.7","humidity":"87","winddir":"5","windspeedmph":"0.0","windgustmph":"0.0","maxdailygust":"11.4","rainratein":"0.000","eventrainin":"0.000","hourlyrainin":"0.000","dailyrainin":"0.000","weeklyrainin":"0.000","monthlyrainin":"1.827","totalrainin":"71.799","solarradiation":"11.25","uv":"0","wh65batt":"0","freq":"868M","model":"WS2900_V2.01.08"}
Hallo Daniel,
ich hab gesehen das Sonnenaufgang/untergang, Mondphasen im Display der Station angezeigt werden kann man diese Daten auch auslesen?
Gruß
Norbert
Some values make no sense if they get not updated regularly. Like rain, dailyrain, solarradiation, ...
Add feature to automatically reset them to 0 if not updated after X rounds of updates.
For Testing: You should at least also run the "Integration" tests in CI to see that adapter can start. If you like you can add more testing like simulation http calls, but thats optional.
Hi,
I have installed the sainlogic adapter a few days ago in combination with my weather station running the FW WH2650A_V1.6.8. All was woriking and i smoothly got all the values.
Today i updated the sainlogic adapter to 0.8.0, and after that the objects will no longer be updated, even if i got valid data from the weather station:
2022-01-13 14:50:29.526 - debug: sainlogic.0 (5150) Listener received WU update: {"ID":"123","PASSWORD":"12345","tempf":"69.3","humidity":"32","dewptf":"38.1","windchillf":"69.3","winddir":"83","windspeedmph":"0.00","windgustmph":"0.00","rainin":"0.000","dailyrainin":"0.031","weeklyrainin":"0.031","monthlyrainin":"0.031","yearlyrainin":"0.031","solarradiation":"0.00","UV":"0","indoortempf":"70.0","indoorhumidity":"33","baromin":"30.499","lowbatt":"0","dateutc":"now","softwaretype":"WH2650A_V1.6.8","action":"updateraw","realtime":"1","rtfreq":"5"} 2022-01-13 14:50:29.529 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(ID) 2022-01-13 14:50:29.531 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(PASSWORD) 2022-01-13 14:50:29.532 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(tempf) 2022-01-13 14:50:29.533 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(humidity) 2022-01-13 14:50:29.535 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(dewptf) 2022-01-13 14:50:29.536 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(windchillf) 2022-01-13 14:50:29.537 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(winddir) 2022-01-13 14:50:29.538 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(windspeedmph) 2022-01-13 14:50:29.539 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(windgustmph) 2022-01-13 14:50:29.541 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(rainin) 2022-01-13 14:50:29.542 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(dailyrainin) 2022-01-13 14:50:29.543 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(weeklyrainin) 2022-01-13 14:50:29.544 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(monthlyrainin) 2022-01-13 14:50:29.551 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(yearlyrainin) 2022-01-13 14:50:29.553 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(solarradiation) 2022-01-13 14:50:29.557 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(UV) 2022-01-13 14:50:29.559 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(indoortempf) 2022-01-13 14:50:29.560 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(indoorhumidity) 2022-01-13 14:50:29.562 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(baromin) 2022-01-13 14:50:29.563 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(lowbatt) 2022-01-13 14:50:29.564 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(dateutc) 2022-01-13 14:50:29.566 - debug: sainlogic.0 (5150) Extracting value for info.softwaretype(softwaretype) 2022-01-13 14:50:29.567 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(action) 2022-01-13 14:50:29.569 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(realtime) 2022-01-13 14:50:29.571 - debug: sainlogic.0 (5150) Extracting value for weather.maxvalues.daily.UVraw_time(rtfreq) 2022-01-13 14:50:29.572 - debug: sainlogic.0 (5150) Extracting value for info.last_listener_update(last_listener_update) 2022-01-13 14:50:29.574 - debug: sainlogic.0 (5150) Setting value from data for weather.maxvalues.daily.UVraw_time to 5 2022-01-13 14:50:29.575 - debug: sainlogic.0 (5150) Setting value from data for info.softwaretype to WH2650A_V1.6.8 2022-01-13 14:50:29.576 - debug: sainlogic.0 (5150) Setting value from data for info.last_listener_update to {"ID":"123","PASSWORD":"12345","tempf":"69.3","humidity":"32","dewptf":"38.1","windchillf":"69.3","winddir":"83","windspeedmph":"0.00","windgustmph":"0.00","rainin":"0.000","dailyrainin":"0.031","weeklyrainin":"0.031","monthlyrainin":"0.031","yearlyrainin":"0.031","solarradiation":"0.00","UV":"0","indoortempf":"70.0","indoorhumidity":"33","baromin":"30.499","lowbatt":"0","dateutc":"now","softwaretype":"WH2650A_V1.6.8","action":"updateraw","realtime":"1","rtfreq":"5"}
Only objects are up to date are the the "Info" section:
Best Regards,
Stefan
I am an automatic service that looks for possible errors in ioBroker and creates an issue for it. The link below leads directly to the test:
https://adapter-check.iobroker.in/?q=https://raw.githubusercontent.com/phifogg/ioBroker.sainlogic
Thanks,
your automatic adapter checker.
P.S.: There is a community in Github, which supports the maintenance and further development of adapters. There you will find many experienced developers who are always ready to assist anyone. New developers are always welcome there. For more informations visit: https://github.com/iobroker-community-adapters/info
Dear Adapter developer,
with js-controller 4.0 object definitions are now also checked that min/max in only provided for number/mixed objects and that the type of the default value matches to the object type.
If something is not correct this is logged as 'warning' or 'info' log.
Please also make sure to update to the lastest @iobroker/testing dependency 2.5.4 or to accept the PR from Apollon77 for legacy testing!
Please spent some time to verify your adapter by ideally starting with a fresh instance and do some actions and verify the log. If you see a warn or info log there from these checks please adjust the adapter and fix the relevant cases.
For questions please refer to ioBroker/ioBroker.js-controller#1749
Please close the issue after you checked it.
Thank you very much for your support to get the best experience for the growing numbers of ioBroker users!
Hi,
I use this adapter with an HP1000SE-PRO (Froggit) and it works quite well. However, some fields from the EW protocol JSON file are not recognized by the adapter, specifically temperature values (°F) from external temperatur-only sensors:
"tf_ch1": "66.9",
"tf_batt1": "1.56",
It would be great, if this prefix "tf_ch#" could be added to the parser so that these fields can also be read.
I have attached the entire JSON file since there are some more fields that might be interesting to add.
Thanks so far!
Best regards,
Joe
{ "PASSKEY": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "stationtype": "EasyWeatherV1.6.4", "dateutc": "2022-05-23 19:09:11", "tempinf": "76.5", "humidityin": "56", "baromrelin": "29.416", "baromabsin": "29.185", "tempf": "63.7", "humidity": "92", "winddir": "101", "winddir_avg10m": "85", "windspeedmph": "0.9", "windspdmph_avg10m": "0.2", "windgustmph": "2.2", "maxdailygust": "14.8", "rainratein": "0.000", "eventrainin": "0.280", "hourlyrainin": "0.000", "dailyrainin": "0.280", "weeklyrainin": "0.280", "monthlyrainin": "1.728", "yearlyrainin": "4.839", "solarradiation": "3.43", "uv": "0", "temp1f": "76.8", "humidity1": "53", "temp2f": "70.3", "humidity2": "54", "soilmoisture1": "43", "soilmoisture2": "47", "soilmoisture3": "56", "tf_ch1": "66.9", "wh65batt": "0", "wh25batt": "0", "batt1": "0", "batt2": "0", "soilbatt1": "1.4", "soilbatt2": "1.4", "soilbatt3": "1.5", "tf_batt1": "1.56", "freq": "868M", "model": "HP1000SE-PRO_Pro_V1.6.9" }
Any Info if it is compatible with https://www.froggit.de/product_info.php?info=p410_dp1500-wi-fi-wetterserver-usb-dongle.html
As Froggit DP1500 supports soil moisture through WS View I'm curious if someone tried this yet.
My Weatherstation Foggit WH3000 lao has the port 45000 open and Sso I tried the adapter :-)
Result is that he can read out the software but is not reading more:-( Any chance to?
Debug Log:
2020-06-20 21:43:18.692 - info: sainlogic.0 (9208) starting. Version 0.6.2 in /opt/iobroker/node_modules/iobroker.sainlogic, node: v14.4.0, js-controller: 3.1.4
2020-06-20 21:43:18.708 - info: sainlogic.0 (9208) Starting Scheduler
2020-06-20 21:43:18.709 - info: sainlogic.0 (9208) Scheduler call ws_getfirmware activated
2020-06-20 21:43:18.709 - info: sainlogic.0 (9208) Scheduler call ws_getcurrent activated
2020-06-20 21:43:18.709 - info: sainlogic.0 (9208) Scheduler call ws_getmax activated
2020-06-20 21:43:18.709 - info: sainlogic.0 (9208) Scheduler call ws_getmin activated
2020-06-20 21:43:18.709 - info: sainlogic.0 (9208) Scheduler call ws_getmaxdaily activated
2020-06-20 21:43:18.710 - info: sainlogic.0 (9208) Scheduler call ws_getmindaily activated
2020-06-20 21:43:18.710 - debug: sainlogic.0 (9208) Weatherstation IP: 192.168.178.58
2020-06-20 21:43:18.710 - debug: sainlogic.0 (9208) Weatherstation port: 45000
2020-06-20 21:43:18.710 - debug: sainlogic.0 (9208) Scheduler Interval: 15
2020-06-20 21:43:33.711 - info: sainlogic.0 (9208) Scheduler pulling for new data
2020-06-20 21:43:33.736 - debug: sainlogic.0 (9208) Scheduler connected to weather station run 255,255,80,3,83
2020-06-20 21:43:33.743 - debug: sainlogic.0 (9208) FW Scheduler Received data string: ffff501511456173795765617468657256312e312e34
2020-06-20 21:43:33.743 - debug: sainlogic.0 (9208) Data Command received: 80 subcommand 69
2020-06-20 21:43:33.744 - debug: sainlogic.0 (9208) Data object: {"softwaretype":"EasyWeatherV1.1.4"}
2020-06-20 21:43:33.744 - info: sainlogic.0 (9208) Scheduler updating IOBroker states
2020-06-20 21:43:33.745 - debug: sainlogic.0 (9208) Setting value from data for info.softwaretype to EasyWeatherV1.1.4
2020-06-20 21:43:33.746 - debug: sainlogic.0 (9208) Scheduler connected to weather station run 255,255,11,0,6,4,4,25
2020-06-20 21:43:48.711 - info: sainlogic.0 (9208) Scheduler pulling for new data
2020-06-20 21:43:48.711 - debug: sainlogic.0 (9208) Scheduler connected to weather station run 255,255,80,3,83
2020-06-20 21:43:48.722 - debug: sainlogic.0 (9208) FW Scheduler Received data string: ffff501511456173795765617468657256312e312e34
2020-06-20 21:43:48.722 - debug: sainlogic.0 (9208) Data Command received: 80 subcommand 69
2020-06-20 21:43:48.722 - debug: sainlogic.0 (9208) Data object: {"softwaretype":"EasyWeatherV1.1.4"}
2020-06-20 21:43:48.722 - info: sainlogic.0 (9208) Scheduler updating IOBroker states
2020-06-20 21:43:48.723 - debug: sainlogic.0 (9208) Setting value from data for info.softwaretype to EasyWeatherV1.1.4
2020-06-20 21:43:48.723 - debug: sainlogic.0 (9208) Scheduler connected to weather station run 255,255,11,0,6,4,4,25
2020-06-20 21:44:03.711 - info: sainlogic.0 (9208) Scheduler pulling for new data
2020-06-20 21:44:03.712 - error: sainlogic.0 (9208) Connection error on 192.168.178.58:45000: Error: connect EISCONN 192.168.178.58:45000 - Local (192.168.178.79:46968)
2020-06-20 21:44:03.713 - debug: sainlogic.0 (9208) FW Scheduler Connection closed
2020-06-20 21:44:18.711 - info: sainlogic.0 (9208) Scheduler pulling for new data
2020-06-20 21:44:18.721 - debug: sainlogic.0 (9208) Scheduler connected to weather station run 255,255,80,3,83
2020-06-20 21:44:18.722 - debug: sainlogic.0 (9208) Scheduler connected to weather station run 255,255,80,3,83
2020-06-20 21:44:18.737 - debug: sainlogic.0 (9208) FW Scheduler Received data string: ffff501511456173795765617468657256312e312e34
2020-06-20 21:44:18.737 - debug: sainlogic.0 (9208) Data Command received: 80 subcommand 69
2020-06-20 21:44:18.737 - debug: sainlogic.0 (9208) Data object: {"softwaretype":"EasyWeatherV1.1.4"}
2020-06-20 21:44:18.737 - info: sainlogic.0 (9208) Scheduler updating IOBroker states
2020-06-20 21:44:18.738 - debug: sainlogic.0 (9208) Setting value from data for info.softwaretype to EasyWeatherV1.1.4
2020-06-20 21:44:18.738 - debug: sainlogic.0 (9208) Scheduler connected to weather station run 255,255,11,0,6,4,4,25
2020-06-20 21:44:18.790 - debug: sainlogic.0 (9208) FW Scheduler Received data string: ffff501511456173795765617468657256312e312e34
2020-06-20 21:44:18.790 - debug: sainlogic.0 (9208) Data Command received: 80 subcommand 69
2020-06-20 21:44:18.790 - debug: sainlogic.0 (9208) Data object: {"softwaretype":"EasyWeatherV1.1.4"}
2020-06-20 21:44:18.791 - info: sainlogic.0 (9208) Scheduler updating IOBroker states
2020-06-20 21:44:18.791 - debug: sainlogic.0 (9208) Setting value from data for info.softwaretype to EasyWeatherV1.1.4
2020-06-20 21:44:18.791 - debug: sainlogic.0 (9208) Scheduler connected to weather station run 255,255,11,0,6,5,5,27
2020-06-20 21:44:19.175 - debug: host.io-test.compactgroup1 object change system.adapter.sainlogic.0 (from: system.adapter.admin.0)
2020-06-20 21:44:19.175 - debug: host.io-test object change system.adapter.sainlogic.0 (from: system.adapter.admin.0)
BTW: When I see that log correct then something is strange because sometimes the connection not seems to be closed (at least log missing).
Hallo Daniel, kannst du evtl. sagen woher der Fehler kommt?
(4699) State "sainlogic.0.weather.current.windheading" has no existing object, this might lead to an error in future versions
(4699) Scheduler received data for unkown command 11 subcommand 1
Hallo,
bisher lese ich die WS980WIFI direkt aus.
Ich möchte aber jetzt gerne auf den Adapter umsteigen.
Frage:
Wäre es möglich, die Zeitpunkte der Min- und Maxwerte mit auszulesen?
Bei der WS980WIFI könnten diese ja als getrennte Stunden- und Minutenangabe direkt nach dem eigentlichen Wert aus der API mit ausgelesen werden?
$format =
'x7/' . # Override first 7 bytes
'n1Innentemp/' . # Get the next 2 bytes
'C1Innentemp_h/' . # Get the next 1 byte
'C1Innentemp_m/' . # Get the next 1 byte
'x1/' . # Override 1 byte
'n1Aussentemp/' . # Get the next 2 bytes
'C1Aussentemp_h/' . # Get the next 1 byte
'C1Aussentemp_m/' . # Get the next 1 byte
'x1/' . # Override 1 byte
'n1Taupunkt/' . # Get the next 2 bytes
'C1Taupunkt_h/' . # Get the next 1 byte
'C1Taupunkt_m/' . # Get the next 1 byte
...
Ansonsten weis ich ja gar nicht, wann am heutigen Tag die höchste Windgeschwindigkeit war usw.
Viele Grüße,
paulinchen
Es tut mir leid aber der Fehler ist wieder da.
sainlogic.0 2022-04-02 13:56:02.260 warn
State value to set for "sainlogic.0.weather.current.UVraw" has value "2036" greater than max "2000"
Kann es sein das du evtl. einen übersehen hast es gibt ja mehrere UV Raw.
es gibt ja einen unter sainlogic.0.weather.current und Max. UV (raw) (absolut)
Following warning is display in log:
State "sainlogic.0.info.last_listener_update" has no existing object, this might lead to an error in future versions
Adapterversion 0.6.4
Nach Update des js-Controllers wird nachfolgendes im Log angezeigt.
sainlogic.0 | 2021-04-30 21:29:37.154 | warn | (6166) State value to set for "sainlogic.0.weather.current.uvi" has wrong type "string" but has to be "number"
-- | -- | -- | --
sainlogic.0 | 2021-04-30 21:29:37.154 | warn | (6166) State value to set for "sainlogic.0.weather.current.winddir" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 21:29:37.153 | warn | (6166) State value to set for "sainlogic.0.weather.current.outdoorhumidity" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 21:29:37.153 | warn | (6166) State value to set for "sainlogic.0.weather.current.indoorhumidity" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 21:29:37.141 | warn | (6166) State "sainlogic.0.info.last_listener_update" has no existing object, this might lead to an error in future versions
sainlogic.0 | 2021-04-30 19:28:36.125 | warn | (6166) State value to set for "sainlogic.0.weather.current.uvi" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 19:28:36.124 | warn | (6166) State value to set for "sainlogic.0.weather.current.winddir" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 19:28:36.124 | warn | (6166) State value to set for "sainlogic.0.weather.current.outdoorhumidity" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 19:28:36.123 | warn | (6166) State value to set for "sainlogic.0.weather.current.indoorhumidity" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 19:28:36.121 | warn | (6166) State "sainlogic.0.info.last_listener_update" has no existing object, this might lead to an error in future versions
sainlogic.0 | 2021-04-30 19:27:35.128 | warn | (6166) State value to set for "sainlogic.0.weather.current.uvi" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 19:27:35.128 | warn | (6166) State value to set for "sainlogic.0.weather.current.winddir" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 19:27:35.127 | warn | (6166) State value to set for "sainlogic.0.weather.current.outdoorhumidity" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 19:27:35.126 | warn | (6166) State value to set for "sainlogic.0.weather.current.indoorhumidity" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 19:27:35.122 | warn | (6166) State "sainlogic.0.info.last_listener_update" has no existing object, this might lead to an error in future versions
sainlogic.0 | 2021-04-30 19:26:34.171 | warn | (6166) State value to set for "sainlogic.0.weather.current.uvi" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 19:26:34.170 | warn | (6166) State value to set for "sainlogic.0.weather.current.winddir" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 19:26:34.170 | warn | (6166) State value to set for "sainlogic.0.weather.current.outdoorhumidity" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 19:26:34.170 | warn | (6166) State value to set for "sainlogic.0.weather.current.indoorhumidity" has wrong type "string" but has to be "number"
sainlogic.0 | 2021-04-30 19:26:34.167 | warn | (6166) State "sainlogic.0.info.last_listener_update" has no existing object, this might lead to an error in future versions
Hi,
i installed the adapter to read the data from Sainlogic WS3500. I followed the instructions for the configuration, but the instance cannot be started. The following log is output:
host.raspberrypi | 2021-03-11 14:25:35.653 | info | Restart adapter system.adapter.sainlogic.0 because enabled |
---|---|---|---|
host.raspberrypi | 2021-03-11 14:25:35.652 | error | instance system.adapter.sainlogic.0 terminated with code 6 (UNCAUGHT_EXCEPTION) |
sainlogic.0 | 2021-03-11 14:25:35.099 | warn | (4457) Terminated (UNCAUGHT_EXCEPTION): Without reason |
sainlogic.0 | 2021-03-11 14:25:35.097 | info | (4457) terminating |
sainlogic.0 | 2021-03-11 14:25:35.034 | info | (4457) Starting Listener |
sainlogic.0 | 2021-03-11 14:25:35.001 | info | (4457) starting. Version 0.6.4 in /opt/iobroker/node_modules/iobroker.sainlogic, node: v12.20.2, js-controller: 3.2.16 |
sainlogic.0 | 2021-03-11 14:25:34.595 | error | (4457) Cannot read property 'bind' of undefined |
sainlogic.0 | 2021-03-11 14:25:34.594 | error | at internal/main/run_main_module.js:17:47 |
sainlogic.0 | 2021-03-11 14:25:34.594 | error | at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12) |
sainlogic.0 | 2021-03-11 14:25:34.594 | error | at Function.Module._load (internal/modules/cjs/loader.js:708:14) |
sainlogic.0 | 2021-03-11 14:25:34.594 | error | at Module.load (internal/modules/cjs/loader.js:863:32) |
sainlogic.0 | 2021-03-11 14:25:34.594 | error | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10) |
sainlogic.0 | 2021-03-11 14:25:34.594 | error | at Module._compile (internal/modules/cjs/loader.js:999:30) |
sainlogic.0 | 2021-03-11 14:25:34.594 | error | at Object. (/opt/iobroker/node_modules/iobroker.sainlogic/main.js:281:5) |
sainlogic.0 | 2021-03-11 14:25:34.594 | error | at new Sainlogic (/opt/iobroker/node_modules/iobroker.sainlogic/main.js:30:53) |
sainlogic.0 | 2021-03-11 14:25:34.594 | error | (4457) TypeError: Cannot read property 'bind' of undefined |
sainlogic.0 | 2021-03-11 14:25:34.591 | error | (4457) uncaught exception: Cannot read property 'bind' of undefined |
host.raspberrypi | 2021-03-11 14:25:33.416 | info | instance system.adapter.sainlogic.0 started with pid 4457 |
My system:
raspberrypi
Platform linux
Betriebssystem linux
Architektur arm
CPUs 4
Geschwindigkeit 700 MHz
Modell ARMv7 Processor rev 3 (v7l)
RAM 7.69 GB
Node.js v12.20.2 (Es gibt eine neuere Version: v12.21.0)
NPM 6.14.11
Festplatte Größe 58.25 GB
Festplatte frei 54.28 GB
Anzahl der Adapter 334
Aktive Instanzen 10
Can someone help me find the cause?
Thank you!
greeting
Franz
Hallo,
könnte vielleicht folgende Kleinigkeit integriert werden?
Bei Regen einen Variable auf true setzen und bei Trockenheit auf false?
Is this gateway and the sensor supported? It seems to be the same as Froggit DP1500/DP100
I use a WH2650A station, the most thinks work fine but the sainlogic.0.weather.current.dewpointtemp shows (null).
Hallo,
ich lese mit dem Adapter meine Sainlogic WS 3500 aus. Das klappt soweit auch alles super, leider werden 4 Werte nicht ausgelesen:
UVraw
dewpointtemp
windchilltemp
solarradiation
Bei den ersten 3 dieser Werte steht nur (null) gefolgt von der Einheit. Bei solarradiation steht immer 0 lx. Die Einheit ist hier aber eigentlich w/m².
Die fehlenden Werte werden von der WS 3500 geliefert und auch im weatherunderground-Adapter angezeigt. Ebenso bei Ecowitt und in der App.
Ich würde aber gerne den Sainlogic-Adapter nutzen, weil beim weatherunderground-Adapter andere Werte fehlen.
Ist das bekannt, dass diese Werte nicht ausgelesen werden oder liegt das Problem eher auf meiner Seite?
Verwendeter Adapter ist 0.73
javascript: 3.3.22
Viele Grüße
Sneaker
Hallo Daniel,
ELV 980WIFI Wetterstation sendet rain rate 0, im neuesten Adapter bleibt der Wert aber immer gleich und leuchtet rot, bei der Aktualisierung wird der Wert nicht angefasst.
Das betrifft auch weitere Einträge
weather
Abschnitt current
Eintrag -> rain Rainrate
Abschnitt maxvalues -daily
Eintrag -> monthlyrain Max. Rainrate (Monthly) (daily)
Abschnitt minvalues -daily
alle Einträge leuchten rot und werden nicht angefasst bei der Aktualisierung
state | 56 µW/m² | editdeletebuild | |||||
---|---|---|---|---|---|---|---|
UV (raw) | |||||||
dailyrain | state | value | 8.6 mm | editdeletebuild | |||
Rainrate (Daily) | |||||||
dewpointtemp | state | value.temperature | 0.6 °C | editdeletebuild | |||
Dewpoint temperature | |||||||
indoorhumidity | state | value.humidity | 31% | editdeletebuild | |||
Indoor humidity | |||||||
indoortemp | state | value.temperature | 24 °C | editdeletebuild | |||
Indoor temperature | |||||||
monthlyrain | state | value | 21.6 mm | editdeletebuild | |||
Rainrate (Monthly) | |||||||
outdoorhumidity | state | value.humidity | 56% | editdeletebuild | |||
Outdoor humidity | |||||||
outdoortemp | state | value.temperature | 8.9 °C | editdeletebuild | |||
Outdoor temperature | |||||||
pressureabs | state | value.pressure | 983.9 hPa | editdeletebuild | |||
Pressure absolut | |||||||
pressurerel | state | value.pressure | 983.9 hPa | editdeletebuild | |||
Pressure relative | |||||||
rain | state | value | 1.2 mm | editdeletebuild | |||
Rainrate | |||||||
solarradiation | state | value.brightness | 6913 lx | editdeletebuild | |||
Solar Radiation |
mit eine Script sehe ich aber das der korrekte Wert gesendet wird:
Datenstring für ioBroker:
javascript.0.Wetterstation.Innentemperatur=24.11&javascript.0.Wetterstation.Aussentemperatur=9.50&javascript.0.Wetterstation.Taupunkt=.43&javascript.0.Wetterstation.Gefuehlte_Temperatur=9.72&javascript.0.Wetterstation.Innenfeuchtigkeit=31&javascript.0.Wetterstation.Aussenfeuchtigkeit=53&javascript.0.Wetterstation.Wind=3.54&javascript.0.Wetterstation.Wind_max=5.47&javascript.0.Wetterstation.Windrichtung=126&javascript.0.Wetterstation.Druck_absolut=984.22&javascript.0.Wetterstation.Druck_relativ=984.22&javascript.0.Wetterstation.Regenrate=0&javascript.0.Wetterstation.Regen_Tag=8.6&javascript.0.Wetterstation.Regen_Woche=14.5&javascript.0.Wetterstation.Regen_Monat=21.5&javascript.0.Wetterstation.Regen_Jahr=21.5&javascript.0.Wetterstation.Sonnenstrahlung=56.76&javascript.0.Wetterstation.UV_Index=0&javascript.0.Wetterstation.Zeitstempel=15.03.2021%2016:20:05&javascript.0.Wetterstation.Info.FW_Version=EasyWeatherV1.5.7&javascript.0.Wetterstation.Info.Station_Batteriestatus=0&javascript.0.Wetterstation.Regen_Event=16.5&javascript.0.Wetterstation.Regen_Total=21.5&javascript.0.Wetterstation.Info.Wetterstation_Gateway=WS2350_V2.37&javascript.0.Wetterstation.Regenstatus=kein Regen&javascript.0.Wetterstation.UV_Belastung=keine&javascript.0.Wetterstation.Windrichtung_Text=SO&javascript.0.Wetterstation.Info.Hitzeindex=
DATA von Wetterstation:
A&stationtype=EasyWeatherV1.5.7&dateutc=2021-03-15+15:20:05&tempinf=75.4&humidityin=31&baromrelin=29.064&baromabsin=29.064&tempf=49.1&humidity=53&winddir=126&windspeedmph=2.2&windgustmph=3.4&rainratein=0.000&eventrainin=0.650&dailyrainin=0.339&weeklyrainin=0.571&monthlyrainin=0.850&yearlyrainin=0.850&totalrainin=0.850&solarradiation=56.76&uv=0&wh65batt=0&freq=868M&model=WS2350_V2.37
I set everything by the howto.
My Sainlogic WS3500 reaches ioBroker, but the arriving Data is not excepted:
(5457) Listener received illegal request: /weatherstation/updateweatherstation.php?ID=Wittekindstr1&PASSWORD=123qwe&indoortempf=77.9&tempf=73.9&dewptf=37.9&windchillf=73.9&indoorhumidity=33&humidity=2
Everything is up-to-date.
I am an automatic service that looks for possible errors in ioBroker and creates an issue for it. The link below leads directly to the test:
https://adapter-check.iobroker.in/?q=https://raw.githubusercontent.com/phifogg/ioBroker.sainlogic
I have also found warnings that may be fixed if possible.
Thanks,
your automatic adapter checker.
P.S.: There is a community in Github, which supports the maintenance and further development of adapters. There you will find many experienced developers who are always ready to assist anyone. New developers are always welcome there. For more informations visit: https://github.com/iobroker-community-adapters/info
Dear Adapter developer,
with js-controller 3.2 and js-controller 3.3 some additional checks were added to make sure that created objects match to the specifications and also written state values match to the object definition.
If something is not correct this is logged as 'warning' or 'info' log.
Please take the time to verify your adapter by ideally starting with a fresh instance and do some actions and verify the log. If you see a warn log there from these checks please adjust the adapter and fix the relevant cases.
For questions please refer to ioBroker/ioBroker.js-controller#1301
Additionally we are preparing Admin 5 which will have a completely rewritten UI. Please install Admin 5, activate that new UI and verify that the configuration of you adapter works as expected also there.
More informations on Admin 5 can be found in Forum https://forum.iobroker.net/topic/44282/test-adapter-admin-5-0-x-alpha-der-neuen-ui
Please close the issue after you checked it.
Thank you very much for your support!
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.