Code Monkey home page Code Monkey logo

hubitat's People

Contributors

friedcheese2006 avatar kkossev avatar louisparks avatar mavrrick avatar tonesto7 avatar vnistor avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

hubitat's Issues

Cannot cast object 'null' with class 'null' to class 'int'

This device seems to work relatively well with the driver:
https://www.aliexpress.com/item/3256803948188193.html

Advertised as a 2-in-1 motion sensor, I can see the model match as TS0601
endpointId: 01
model: TS0601
application: 40
manufacturer: _TZE200_3towulqd

https://github.com/kkossev/Hubitat/blob/main/Drivers/Tuya%20Multi%20Sensor%204%20In%201/Tuya%20Multi%20Sensor%204%20In%201.groovy#L1089

Setting the Motion Keep Time to 10 for the TS0601 device is throwing an error in the log:
[dev:410]2022-09-19 09:27:21.828 pm [error]org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'null' with class 'null' to class 'int'. Try 'java.lang.Integer' instead on line 1089 (method updated)

30/60/120 options work fine, output from 120:
[dev:410]2022-09-19 09:33:57.526 pm [debug]AAAA sendZigbeeCommands (cmd=[he cmd 0xD3D8 0x01 0xEF00 0x00 {00090904000400000002}, delay 2000, he cmd 0xD3D8 0x01 0xEF00 0x00 {000A0A04000400000002}, delay 2000])
[dev:410]2022-09-19 09:33:57.523 pm [debug]AAAA sending the changed AdvancedOptions
[dev:410]2022-09-19 09:33:57.519 pm [warn]AAAA changing TS0601 Keep Time to : 2
[dev:410]2022-09-19 09:33:57.516 pm [debug]AAAA sendTuyaCommand = [he cmd 0xD3D8 0x01 0xEF00 0x00 {000A0A04000400000002}, delay 2000]
[dev:410]2022-09-19 09:33:57.512 pm [warn]AAAA changing TS0601 sensitivity to : 2
[dev:410]2022-09-19 09:33:57.509 pm [debug]AAAA sendTuyaCommand = [he cmd 0xD3D8 0x01 0xEF00 0x00 {00090904000400000002}, delay 2000]
[dev:410]2022-09-19 09:33:57.506 pm [debug]AAAA Config parameters changed! old=2424320943d37f1d8144bd new=2424320943d37f1d8142bd
[dev:410]2022-09-19 09:33:57.498 pm [info]AAAA Debug logging is will be turned off after 24 hours
[dev:410]2022-09-19 09:33:57.474 pm [info]AAAA Debug logging is true; Description text logging is true
[dev:410]2022-09-19 09:33:57.470 pm [info]AAAA Updating AAAA (Tuya Multi Sensor 4 In 1) model TS0601 manufacturer _TZE200_3towulqd

Request: Aqara Motion and Presence sensor driver for Hubitat - Add presence detection

Hi!

This driver works very well with my P1's. Thank you for sharing your work.

Any chance you could add some form of presence detection to the driver?
Like: No activity for x amount of configurable time will set presence to off.
Or is it already there? Ref: State Variables [notPresentCounter]

This feature will allow automations to trigger based on the presence status of this sensor. And not just motion. And can give indication that something is wrong with the sensor. Allowing action to be taken to remediate the issue.

Thanks!

TVOC battery status

it's an issue, but it's not (if you see what I mean)…
battery status is down as 'to do', just wondering if it's being done.

if it's not being done, any pointers as to where code would change to implement it?

I'm using the driver and it seems to be sound to be honest. I'd like the device to report a bit more frequently but there doesn't seem to be any chivying that will induce a zigbee device into reliable interval reporting. I think they just ignore such requests.

in the meantime, thanks for a great driver. :)

Getting error with Aqara sensor model RTCGQ11LM driver ver 1.2.4

Device manufacturer is empty so the line so SetDeviceName line:if (v.model == device.getDataValue('model') && v.manufacturer == device.getDataValue('manufacturer')) did not work, I've commented out manufacturer part of it and it worked after that.

see log:

dev:72023-08-28 13:11:05.170errorjava.lang.RuntimeException: java.sql.SQLException: NULL not allowed for column "NAME"; SQL statement:
UPDATE DEVICE SET VERSION = ?, DEVICE_NETWORK_ID = ?, LABEL = ?, NAME = ?, ZIGBEE_ID = ?, DEVICE_TYPE_ID = ?, HT_GROUP_ID = ?, UPDATE_TIME = ?, LAN_ID = ?, DISPLAY_AS_CHILD = ?, MAX_EVENTS = ?, MAX_STATES = ?, DISABLED = ?, MESH_ENABLED = ?, MESH_FULL_SYNC = ?, COLLECTION_ID = ?, SPAMMY_THRESHOLD = ?, COMPATIBLE_DEVICE_ID = ?, PARENT_INSTALLED_APP_ID = ? WHERE ID = ? AND VERSION = ? [23502-214] Query: UPDATE DEVICE SET VERSION = ?, DEVICE_NETWORK_ID = ?, LABEL = ?, NAME = ?, ZIGBEE_ID = ?, DEVICE_TYPE_ID = ?, HT_GROUP_ID = ?, UPDATE_TIME = ?, LAN_ID = ?, DISPLAY_AS_CHILD = ?, MAX_EVENTS = ?, MAX_STATES = ?, DISABLED = ?, MESH_ENABLED = ?, MESH_FULL_SYNC = ?, COLLECTION_ID = ?, SPAMMY_THRESHOLD = ?, COMPATIBLE_DEVICE_ID = ?, PARENT_INSTALLED_APP_ID = ? WHERE ID = ? AND VERSION = ? Parameters: [7, 38B1, Test Sensor, null, 00158D0001E5526E, 603, null, Mon Aug 28 13:11:05 AWST 2023, null, false, 11, 30, false, false, false, 1, 300, null, null, 7, 6] on line 1046 (method parse)
dev:72023-08-28 13:11:05.174infoTest Sensor InitializeVars... fullInit = false (driver version 1.2.4 2023/01/26 7:32 PM)
dev:72023-08-28 13:11:05.172infoTest Sensor updating the settings from driver version null to 1.2.4 2023/01/26 7:32 PM
dev:72023-08-28 13:11:05.167debugTest Sensor parse: description is read attr - raw: 38B10104060800001801, dni: 38B1, endpoint: 01, cluster: 0406, size: 08, attrId: 0000, encoding: 18, command: 0A, value: 01
dev:72023-08-28 13:11:05.083warnTest Sensor unknown model lumi.sensor_motion.aq2 manufacturer null
dev:72023-08-28 13:11:05.073tracenot found!
dev:72023-08-28 13:11:05.066traceGZCGQ11LM:[model:lumi.sen_ill.agl01, manufacturer:LUMI, deviceJoinName:Aqara T1 light intensity sensor GZCGQ11LM]
dev:72023-08-28 13:11:05.064traceGZCGQ01LM:[model:lumi.sen_ill.mgl01, manufacturer:LUMI, deviceJoinName:Mi Light Detection Sensor GZCGQ01LM]
dev:72023-08-28 13:11:05.062traceMCCGQ14LM:[model:lumi.magnet.acn001, manufacturer:LUMI, deviceJoinName:Aqara Contact Sensor MCCGQ14LM]
dev:72023-08-28 13:11:05.060traceRTCGQ11LM:[model:lumi.sensor_motion.aq2, manufacturer:LUMI, deviceJoinName:Xiaomi Motion Sensor RTCGQ11LM]
dev:72023-08-28 13:11:05.058traceRTCGQ15LM:[model:lumi.motion.acn001, manufacturer:LUMI, deviceJoinName:Aqara E1 Motion Sensor RTCGQ15LM]
dev:72023-08-28 13:11:05.056traceRTCGQ12LM:[model:lumi.motion.agl02, manufacturer:LUMI, deviceJoinName:Aqara T1 Motion Sensor RTCGQ12LM]
dev:72023-08-28 13:11:05.053traceRTCGQ13LM:[model:lumi.motion.agl04, manufacturer:LUMI, deviceJoinName:Aqara High Precision Motion Sensor RTCGQ13LM, motionRetriggerInterval:[min:2, scale:0, max:200, step:1, type:number], motionSensitivity:[min:1, scale:0, max:3, step:1, type:number, options:[1:low, 2:medium, 3:high]]]
dev:72023-08-28 13:11:05.050traceRTCGQ14LM:[model:lumi.motion.ac02, manufacturer:LUMI, deviceJoinName:Aqara P1 Motion Sensor RTCGQ14LM, motionRetriggerInterval:[min:2, scale:0, max:200, step:1, type:number], motionSensitivity:[min:1, scale:0, max:3, step:1, type:number, options:[1:low, 2:medium, 3:high]]]
dev:72023-08-28 13:11:04.910traceRTCZCGQ11LM:[model:lumi.motion.ac01, manufacturer:aqara, deviceJoinName:Aqara FP1 Human Presence Detector RTCZCGQ11LM, capabilities:[motionSensor:true, temperatureMeasurement:true, battery:true, powerSource:true, signalStrength:true], attributes:[presence, presence_type], preferences:[motionSensitivity:[min:1, scale:0, max:3, step:1, type:number, options:[1:low, 2:medium, 3:high]], approachDistance:true, monitoringMode:true, sendBatteryEventsForDCdevices:true], motionRetriggerInterval:[min:2, scale:0, max:200, step:1, type:number]]
dev:72023-08-28 13:11:04.898infoTest Sensor InitializeVars... fullInit = false (driver version 1.2.4 2023/01/26 7:32 PM)
dev:72023-08-28 13:11:04.890infoTest Sensor updating the settings from driver version null to 1.2.4 2023/01/26 7:32 PM
dev:72023-08-28 13:11:04.883debugTest Sensor parse: description is read attr - raw: 38B10104000A0000210000, dni: 38B1, endpoint: 01, cluster: 0400, size: 0A, attrId: 0000, encoding: 21, command: 0A, value: 0000

2-i-1 motion sensor - motion sensing inverted

I just got a Tuya 2-in-1 motion+lux sensor and have tried it with your driver, via HPM.

    endpointId: 01
    application: 42
    manufacturer: _TZE200_3towulqd
    model: TS0601

It appears the motion detection flag is inverted. When motion is detected, it is registered as no motion, and when there is no motion, it is registered as motion!

Example logging output when motion is detected:

2022-12-08 21:44:48.455[debug] New Motion and Luminance sensor parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 812A 01 00 0000 02 01 00D50104000100, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:812A, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, D5, 01, 04, 00, 01, 00]]

... and when motion is no longer detected:

2022-12-08 21:45:00.730[debug] New Motion and Luminance sensor parse(_TZE200_3towulqd) descMap = [raw:catchall: 0104 EF00 01 01 0040 00 812A 01 00 0000 02 01 00D80104000101, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:812A, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, D8, 01, 04, 00, 01, 01]]

Can be fixed by changing line 475:

<<<                handleMotion(motionActive=fncmd)
>>>                handleMotion(motionActive=!fncmd)

but haven't raised as a pull request as I'm not sure I'm confident enough that it won't break something for another model of sensor!

Tuya Zigbee Temperature Humidity Soil Monitor

I downloaded your script for Tuya devices since it listed "TS0601_Soil _TZE200_myd45weu" as being supported; however, after adding the device to Hubitat and configuring it to use your driver, I'm not getting any data. I'm happy to provide any additional information and test things for you, just let me know what I can do.

Reported Info

Current States

    _info : installed

State Variables

    lastTx : {"tempCfg":"-1,-1,-1","humiCfg":"-1,-1,-1","tempCfgOK":false,"humiCfgOK":false,"cfgTimer":0}
    modelGroup : TS0601_Soil
    lastRx : {"tempTime":1681247248614,"humiTime":1681247248614,"tempCfg":"-1,-1,-1","humiCfg":"-1,-1,-1"}
    stats : {"rxCtr":3,"txCtr":4,"rejoins":0}
    driverVersion : 1.3.2 2023/03/04 9:57 AM
    notPresentCounter : 0
    configState : 0

Screenshot of device in Hubitat

image

Recent Log Entries

I started testing things other than "Auto Detect" even though it looks like it detected it as "TS0601_Soil" properly.

dev:4992023-04-18 10:17:51.171 AMinfoSoil Sensor refresh() is not implemented for this sleepy Zigbee device
dev:4992023-04-18 10:17:50.182 AMerrororg.codehaus.groovy.runtime.metaclass.MissingMethodExceptionNoStack: No signature of method: user_driver_kkossev_Tuya_Temperature_Humidity_Illuminance_LCD_Display_with_a_Clock_838.ping() is applicable for argument types: () values: []
Possible solutions: find(), print(java.lang.Object), print(java.lang.Object), find(groovy.lang.Closure), print(java.io.PrintWriter), run() (method ping)
dev:4992023-04-18 10:17:40.158 AMinfoSoil Sensor Debug logging is false; Description text logging is true
dev:4992023-04-18 10:17:40.155 AMinfoSoil Sensor Updating Soil Sensor (Tuya Temperature Humidity Illuminance LCD Display with a Clock) model TS0601 manufacturer _TZE200_myd45weu modelGroupPreference = TS0601_Tuya (TS0601_Tuya)
dev:4992023-04-12 05:07:39.989 PMwarnSoil Sensor debug logging disabled...
dev:4992023-04-11 05:08:24.190 PMerrororg.codehaus.groovy.runtime.metaclass.MissingMethodExceptionNoStack: No signature of method: user_driver_kkossev_Tuya_Temperature_Humidity_Illuminance_LCD_Display_with_a_Clock_838.ping() is applicable for argument types: () values: []
Possible solutions: find(), print(java.lang.Object), print(java.lang.Object), find(groovy.lang.Closure), print(java.io.PrintWriter), run() (method ping)
dev:4992023-04-11 05:08:16.203 PMinfoSoil Sensor refresh() is not implemented for this sleepy Zigbee device
dev:4992023-04-11 05:07:44.306 PMwarnTuya Temperature Humidity Illuminance LCD Display with a Clock NOT PARSED : [raw:DD200100001801002048E2FF2038E4FF2001, dni:DD20, endpoint:01, cluster:0000, size:18, attrId:0001, encoding:20, command:0A, value:48, clusterInt:0, attrInt:1, additionalAttrs:[[value:38, encoding:20, attrId:FFE2, consumedBytes:4, attrInt:65506], [value:01, encoding:20, attrId:FFE4, consumedBytes:4, attrInt:65508]]]
dev:4992023-04-11 05:07:44.299 PMdebugTuya Temperature Humidity Illuminance LCD Display with a Clock parse() descMap = [raw:DD200100001801002048E2FF2038E4FF2001, dni:DD20, endpoint:01, cluster:0000, size:18, attrId:0001, encoding:20, command:0A, value:48, clusterInt:0, attrInt:1, additionalAttrs:[[value:38, encoding:20, attrId:FFE2, consumedBytes:4, attrInt:65506], [value:01, encoding:20, attrId:FFE4, consumedBytes:4, attrInt:65508]]]
dev:4992023-04-11 05:07:39.971 PMtraceTuya Temperature Humidity Illuminance LCD Display with a Clock sendZigbeeCommands(cmd=[])
dev:4992023-04-11 05:07:39.965 PMinfoTuya Temperature Humidity Illuminance LCD Display with a Clock Debug logging is will be turned off after 24 hours
dev:4992023-04-11 05:07:39.928 PMinfoTuya Temperature Humidity Illuminance LCD Display with a Clock Debug logging is true; Description text logging is true
dev:4992023-04-11 05:07:39.924 PMinfoTuya Temperature Humidity Illuminance LCD Display with a Clock Updating null (Tuya Temperature Humidity Illuminance LCD Display with a Clock) model TS0601 manufacturer _TZE200_myd45weu modelGroupPreference = Auto detect (TS0601_Soil)
dev:4992023-04-11 05:07:39.381 PMinfoTuya Temperature Humidity Illuminance LCD Display with a Clock Received Write Attribute Response for cluster:0000 , data=[00] (Status: Success)
dev:4992023-04-11 05:07:39.369 PMdebugTuya Temperature Humidity Illuminance LCD Display with a Clock parse() descMap = [raw:catchall: 0104 0000 01 01 0040 00 DD20 00 00 0000 04 01 00, profileId:0104, clusterId:0000, clusterInt:0, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:DD20, isClusterSpecific:false, isManufacturerSpecific:false, manufacturerId:0000, command:04, direction:01, data:[00]]
dev:4992023-04-11 05:07:39.344 PMwarnTuya Temperature Humidity Illuminance LCD Display with a Clock NOT PARSED : [raw:DD2001000068040042105F545A453230305F6D796434357765750000002003010000204805000042065453303630310700003003FEFF003000, dni:DD20, endpoint:01, cluster:0000, size:68, attrId:0004, encoding:42, command:01, value:_TZE200_myd45weu, clusterInt:0, attrInt:4, additionalAttrs:[[value:03, encoding:20, attrId:0000, consumedBytes:4, attrInt:0], [value:48, encoding:20, attrId:0001, consumedBytes:4, attrInt:1], [value:TS0601, encoding:42, attrId:0005, consumedBytes:9, attrInt:5]]]
dev:4992023-04-11 05:07:39.331 PMdebugTuya Temperature Humidity Illuminance LCD Display with a Clock parse() descMap = [raw:DD2001000068040042105F545A453230305F6D796434357765750000002003010000204805000042065453303630310700003003FEFF003000, dni:DD20, endpoint:01, cluster:0000, size:68, attrId:0004, encoding:42, command:01, value:_TZE200_myd45weu, clusterInt:0, attrInt:4, additionalAttrs:[[value:03, encoding:20, attrId:0000, consumedBytes:4, attrInt:0], [value:48, encoding:20, attrId:0001, consumedBytes:4, attrInt:1], [value:TS0601, encoding:42, attrId:0005, consumedBytes:9, attrInt:5]]]
dev:4992023-04-11 05:07:38.820 PMtraceTuya Temperature Humidity Illuminance LCD Display with a Clock sendZigbeeCommands(cmd=[he raw 0xDD20 1 0x01 0x0000 {10 00 00 04 00 00 00 01 00 05 00 07 00 FE FF}, delay 200, he wattr 0xDD20 0x01 0x0000 0xFFDE 0x20 {13} {}, delay 200])
dev:4992023-04-11 05:07:38.764 PMinfoTuya Temperature Humidity Illuminance LCD Display with a Clock configure()..
dev:4992023-04-11 05:07:38.628 PMinfoTuya Temperature Humidity Illuminance LCD Display with a Clock Statistics were reset. Press F5 to refresh the device page
dev:4992023-04-11 05:07:38.612 PMinfoTuya Temperature Humidity Illuminance LCD Display with a Clock InitializeVars()... fullInit = true
dev:4992023-04-11 05:07:38.591 PMinfoTuya Temperature Humidity Illuminance LCD Display with a Clock installed()...

Version 1.4.4 of driver "Tuya Multi Sensor 4 In 1" fails to install

Get below message when installing / upgrading to version 1.4.4 of "Tuya Multi Sensor 4 In 1" driver

An error occurred while installing the package: Failed to install driver https://raw.githubusercontent.com/kkossev/Hubitat/main/Drivers/Tuya%20Multi%20Sensor%204%20In%201/Tuya%20Multi%20Sensor%204%20In%201.groovy. Please notify the package developer..

Be sure the package is not in use with devices.

Error message when installing manually:

HTTP ERROR 500 java.lang.OutOfMemoryError: Metaspace
URI:	/driver/save
STATUS:	500
MESSAGE:	java.lang.OutOfMemoryError: Metaspace
SERVLET:	-
CAUSED BY:	java.lang.OutOfMemoryError: Metaspace
Caused by:
java.lang.OutOfMemoryError: Metaspace

org.codehaus.groovy.runtime.metaclass.MissingMethodExceptionNoStack

I am getting this error in the hubitat C7 logs for the Tuya Zigbee Metering Plug.

org.codehaus.groovy.runtime.metaclass.MissingMethodExceptionNoStack: No signature of method: user_driver_kkossev_Tuya_Zigbee_Metering_Plug_955.checkPresence() is applicable for argument types: () values: [] (method checkPresence)

image

P.S. Thanks for this driver!

Multi-gang Tuya devices

Hi kkossev, I'm Mariano Colmenarejo

Thanks for sharing your code.

I wanted to tell you about a problem I have with Tuya multi-gang devices.

I have made a Driver Edge (lua) on the smartthings platform for zigbee-multi-switch and I am trying to solve a problem with the new TUYA multi-gang switches, which activate and deactivate all channels at the same time from the app.

I have seen in the code of the DTH zemismart-zigbee-multigang-switch.groovy, that you did the same solution that I also saw in zigbee2mqtt, read all the attributes of the clusters basic in the device configuration. (tuyaBlackMagic)

I have implemented it in my driver just before configuring the clusters on-off and the users are still unable to independently control the different channels.

    print("<<< Read Basic cluster attributes >>>")
    device:send(zcl_clusters.Basic.attributes.ManufacturerName:read(device))
    device:send(zcl_clusters.Basic.attributes.ZCLVersion:read(device))
    device:send(zcl_clusters.Basic.attributes.ApplicationVersion:read(device))
    device:send(zcl_clusters.Basic.attributes.ModelIdentifier:read(device))
    device:send(zcl_clusters.Basic.attributes.PowerSource:read(device))
    device:send(cluster_base.read_attribute(device, data_types.ClusterId(0x0000), data_types.AttributeId(0xFFFE)))

I don't know if there's something I'm doing wrong or missing, and although I've done some DTH in groovy I'm not an expert either.

The only strange thing I found was the response to cluster E000, attribute D003, which according to Tuya's documentation corresponds to "DP19 Inching switch", data_type Array and the devices respond with a text value "AAAAAgAA" for two gang and "AAAAAgAABAAA" for 3 gang. I don't know if it has anything to do with the problem.

2022-10-12T16:16:47.916273675+00:00 INFO Zigbee Multi Switch and Child Mc <ZigbeeDevice: 74d8597d-5696-478c-8393-10957ec6cdb8 [0x02E6] (TS0002 Switch)> received Zigbee message: < ZigbeeMessageRx || type: 0x00, < AddressHeader || src_addr: 0x02E6, src_endpoint: 0x01, dest_addr: 0x0000, dest_endpoint: 0x01, profile: 0x0104, cluster: 0xE000 >, lqi: 0x88, rssi: -66, body_length: 0x000F, < ZCLMessageBody || < ZCLHeader || frame_ctrl: 0x08, seqno: 0x08, ZCLCommandId: 0x0A >, < ReportAttribute || < AttributeRecord || AttributeId: 0xD003, DataType: CharString, CharString: “AAAAAgAA” > > > >

2022-10-13T23:28:14.636755198+00:00 INFO Zigbee Multi Switch and Child Mc <ZigbeeDevice: 97a3eb51-9928-4894-8b1c-3863b566605a [0x988B] (TS0003 Switch)> received Zigbee message: < ZigbeeMessageRx || type: 0x00, < AddressHeader || src_addr: 0x988B, src_endpoint: 0x01, dest_addr: 0x0000, dest_endpoint: 0x01, profile: 0x0104, cluster: 0xE000 >, lqi: 0xD0, rssi: -48, body_length: 0x0013, < ZCLMessageBody || < ZCLHeader || frame_ctrl: 0x08, seqno: 0xF6, ZCLCommandId: 0x0A >, < ReportAttribute || < AttributeRecord || AttributeId: 0xD003, DataType: CharString, CharString: “AAAAAgAABAAA” > > > >

Thanks in advance
Cheers

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.