Giter Site home page Giter Site logo

iobroker.husq-automower's Introduction

Logo ioBroker.husq-automower

NPM

Tests: Linux/Mac: Travis-CI Windows: AppVeyor

Deutsche Beschreibung hier

This adapter connects IoBroker with your Husqvarna Automower with Connect-Modul Mowing times, battery level and various other data are read out from the mower. The adapter can control the mower (start, stop, park). Tested with 450X and 315X.

For communication with Husqvarna web server, the adapter use scripts from [rannmann] (https://github.com/rannmann/node-husqvarna-automower).

Over the action state "husq-automower.x.mower.action" you can do following actions: = 1 - start mower = 2 - stop mower = 3 - park mower = 9 - query Status (if schdeuler stopped, mower.scheduleTime == 0) = 77 - Rainbutton, toggle mower.stoppedDueRain: true - park mower it's raining, false - after configered standby time, the mower automatic start button work parallel with optional sensor for rain detection = 91 - stop status scheduler (mower.scheduleTime == 0) = 92 - start status scheduler

installation

At least Node 8.X.X must be installed, Node 0.10 and 0.12 are no longer supported by this adapter.

settings

  • to connect to the mower, type in email and password from your Husqvarna account in the config.
  • max. distance from base, if exceeded (value > 0), adapter write message to mower.sendMessage

Changelog

1.1.2

  • (Greyhound) fix some setState with ack=true
  • (Greyhound) fix mower error handling on unknown codes

1.1.1

  • (Greyhound) some improvements in adapter handling

1.1.0

  • (Greyhound) mower.lastStartTime moved to statistics: mower.statistics.mowingStartTime, old value is adopted and lastStartTime is deleted, if necessary adjust in view (s)
  • (Greyhound) Subscription to rain sensor (subscribeForeignStates) does not seem to work everywhere, so the status is also read out directly in updateStatus and checked for changes
  • (Greyhound) Rain value comparison changed, enter the value directly in the configuration, with number: with 0 or 1 ==, otherwise> =, the type of the value is read from the DP of the sensor
  • (Greyhound) Configuration value for waiting time after rain is interpreted as follows:> = 0 - started mower after the specified time, <0 or no value - no automatic start
  • (Greyhound) Counter for the number of WebRequests, successful, errors per day and cumulative month (WebRequestCountXXXXX), after 4 errors a warning is written in the log and the query interval is possibly set to Inactive, after more than 10 errors the adapter status is set to errors.
  • (Greyhound) The text for the current and last error code is saved in currentErrorMsg and lastErrorMsg (in language generated from API)
  • (Greyhound) sendMessage, the last field of the recipient has been omitted, is now controlled for me depending on the priority
  • (Greyhound) Fixed bug when recognizing the start time of mowing (StartMowingTime)
  • (Greyhound) various changes to make the code more robust

0.3.12

  • (Greyhound) improved error handling with updateStatus, GPS data
  • (Greyhound) Detection when starting whether the battery is charged and resetting the ChargingStartTime

0.3.10

  • (Greyhound) load rain sensor state on start
  • (Greyhound) fix status detecion (no CHARGING state with beginning 12.06.2018 ?)
  • (Greyhound) new datapoint mower.rawResponse_mowers
  • (Greyhound) fix variablen naming for adapter.config (no '_')
  • (Greyhound) changed rain actions, currently only park mower if rain detected, no automatic start if dry

0.3.9

  • (Greyhound) complete configuration fields in io-package.json
  • (Greyhound) add message, if mower base disconnected or mower lifted
  • (Greyhound) new limit for batterycharge for mower.sendMessage
  • (Greyhound) correct small errors in translation configuration

0.3.8

  • (Greyhound) fix problem with configuration off new instance
  • (Greyhound) add testing with appveyor

0.3.7

  • (Greyhound) mower nickname in mower.sendMessage
  • (Greyhound) translations complete

0.3.6

  • (Greyhound) change header files in index.html for admin v2

0.3.5

  • (Greyhound) remove dir widgets and www
  • (Greyhound) clean io-package.json, datapoints created on start from adaptercode
  • (Greyhound) add to Travis CI

0.3.4

  • (Greyhound) new configuration site
  • (Greyhound) correction in accumulate statistic values
  • (Greyhound) additional statistic values
  • (Greyhound) bugfixes in rain handler

0.3.3

  • (Greyhound) correct automower datetime with timezone offset
  • (Greyhound) other small corrections

0.3.2

  • (Greyhound) fix a problem in adapter.on('objectChange', ...
  • (Greyhound) div. renamings and bugfixes

0.3.1

  • (Greyhound) initial release

< 0.3.1

  • (Greyhound) miscellaneous js-script versions

License

The MIT License (MIT)

Copyright (c) 2021 truegreyhound [email protected]

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

iobroker.husq-automower's People

Contributors

dependabot[bot] avatar truegreyhound avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

iobroker.husq-automower's Issues

Compatibility check to js-controller 3.3 and Admin5 React UI

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!

Warnings after upgrade to js-controller 3.2.7

Hello,

after installation of js-controller 3.2.7 I'am getting following warnings.

husq-automower.0 2021-01-17 11:22:19.577 warn (3406) State "husq-automower.0.info.connection" has no existing object, this might lead to an error in future versions

This also happens if you restart the adapter.

Thank you in advance

Compatibility check to js-controller 4.0

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!

Please check ioBroker.husq-automower with js-controller 2.0

Hi,

the new js-controller 2.0 will come into latest repository in the next days and we want to make sure that all adapters are working well. We already did a 2 weeks Beta test and so some adapter were aleady checked and some needed slight adjustments.

You can find more information in ioBroker/ioBroker.js-controller#482 and in the ioBroker Forum. If you have more technical questions please write in the referenced issue or in the Developer thread please. General questions are best in the genral thread.

Please update your systems to js-controller 2.0 and check your adapter.

Please close this issue once you have checked your adapter or received successfull reports from users.

Thank you very much for your support. Please contact us in the other Threads or Forum on any question.

Please add you adapter to our repository

We saw your adapter and if it is ready please request that it is added to the repository. With this it becomes available for all users. Please consult https://github.com/ioBroker/ioBroker.repositories#add-a-new-adapter-to-the-latest-repository and the following sections for more details.
If you need help, contact us in the forum https://forum.iobroker.net/ or in the developer chat https://github.com/iobroker-community-adapters/info .

Thank you for your support.

instance system.adapter.husq-automower.0 terminated with code 6 (UNCAUGHT_EXCEPTION)

Hi,
I've insert my account data (email & password), but the adapter isn't working.
Any ideas?
Thanks,
Stefan

host.ioBrokerGarage 2021-05-14 15:57:31.353 info Restart adapter system.adapter.husq-automower.0 because enabled
host.ioBrokerGarage 2021-05-14 15:57:31.350 error instance system.adapter.husq-automower.0 terminated with code 6 (UNCAUGHT_EXCEPTION)
husq-automower.0 2021-05-14 15:57:31.022 info (26493) Logged on. Checking for mowers.
husq-automower.0 2021-05-14 15:57:30.721 warn (26493) State "husq-automower.0.info.connection" has no existing object, this might lead to an error in future versions
husq-automower.0 2021-05-14 15:57:30.652 warn (26493) Terminated (UNCAUGHT_EXCEPTION): Without reason
husq-automower.0 2021-05-14 15:57:30.648 info (26493) terminating
husq-automower.0 2021-05-14 15:57:30.645 info (26493) cleaned everything up...
husq-automower.0 2021-05-14 15:57:30.643 info (26493) Logged off.
husq-automower.0 2021-05-14 15:57:30.620 warn (26493) State "husq-automower.0.info.connection" has no existing object, this might lead to an error in future versions
husq-automower.0 2021-05-14 15:57:30.558 error (26493) Cannot read property 'val' of null
husq-automower.0 2021-05-14 15:57:30.556 error at processImmediate (internal/timers.js:463:21)
husq-automower.0 2021-05-14 15:57:30.556 error at Immediate. (/opt/iobroker/node_modules/iobroker.husq-automower/main.js:1391:49)
husq-automower.0 2021-05-14 15:57:30.556 error (26493) TypeError: Cannot read property 'val' of null
husq-automower.0 2021-05-14 15:57:30.551 error (26493) uncaught exception: Cannot read property 'val' of null
husq-automower.0 2021-05-14 15:57:30.225 info (26493) Logged off.
husq-automower.0 2021-05-14 15:57:30.101 info (26493) starting. Version 1.0.1 in /opt/iobroker/node_modules/iobroker.husq-automower, node: v14.16.1, js-controller: 3.2.16

Verwendung von 2 automowern - automower wird nicht automtisch aktualisiert

Hallo,

erstmal ein großes Danke für den Adapter!

Ich habe ein Frage. Ich habe jetzt den Adapter ein 2. Mal installiert und die Daten des 2. automowers hinterlegt. So weit funktioniert alles. Beide Mäher sind steuerbar. Allerdings wird der 2. automower (der als letzter installiert wurde) nicht mehr automatisch aktualisiert. Startet man den Adapter neu oder ändert man an den Einstellungen etwas und speichert diese werden die Daten aktualisiert.

Kan mir hier jemand helfen?

folgende Logs habe ich zum automower gefunden:

husq-automower.1 | 2020-07-29 13:42:20.575 | warn | (50886) updateStatus, result.operatingMode === HOME
husq-automower.1 | 2020-07-29 13:42:20.331 | info | (50886) connected, mowersListUpdated, found 2 mower(s)
husq-automower.1 | 2020-07-29 13:42:20.090 | info | (50886) Logged on. Checking for mowers.
husq-automower.1 | 2020-07-29 13:42:19.600 | info | (50886) Logged off.
husq-automower.1 | 2020-07-29 13:42:19.556 | info | (50886) starting. Version 1.0.2 in /opt/iobroker/node_modules/iobroker.husq-automower, node: v10.22.0, js-controller: 3.1.6

husq-automower.0 | 2020-07-29 13:41:02.958 | info | (50680) Terminated (NO_ERROR): Without reason
husq-automower.0 | 2020-07-29 13:41:02.956 | info | (50680) terminating
husq-automower.0 | 2020-07-29 13:41:02.949 | info | (50680) cleaned everything up...
husq-automower.0 | 2020-07-29 13:41:02.948 | info | (50680) Logged off.
husq-automower.0 | 2020-07-29 13:41:02.947 | error | at Timer.processTimers (timers.js:223:10)
husq-automower.0 | 2020-07-29 13:41:02.947 | error | at listOnTimeout (timers.js:263:5)
husq-automower.0 | 2020-07-29 13:41:02.947 | error | at tryOnTimeout (timers.js:300:5)
husq-automower.0 | 2020-07-29 13:41:02.947 | error | at ontimeout (timers.js:436:11)
husq-automower.0 | 2020-07-29 13:41:02.947 | error | at Timeout.updateStatus [as _onTimeout] (/opt/iobroker/node_modules/iobroker.husq-automower/main.js:991:15)
husq-automower.0 | 2020-07-29 13:41:02.947 | error | (50680) TypeError: mobjMower.getStatus is not a function
husq-automower.0 | 2020-07-29 13:41:02.946 | error | (50680) uncaught exception: mobjMower.getStatus is not a function
husq-automower.0 | 2020-07-29 13:41:01.943 | info | (50680) Logged off.
husq-automower.0 | 2020-07-29 13:41:01.864 | info | (50680) starting. Version 1.0.2 in /opt/iobroker/node_modules/iobroker.husq-automower, node: v10.22.0, js-controller: 3.1.6

Vielen Dank

Installation failed

`

host.raspberrypi 2020-05-31 15:30:35.616 info Update repository "default" under "http://download.iobroker.net/sources-dist.json"
host.raspberrypi 2020-05-31 15:30:35.452 info iobroker exit 0
host.raspberrypi 2020-05-31 15:30:34.360 info iobroker upload [0] husq-automower.admin /opt/iobroker/node_modules/iobroker.husq-automower/admin/husq-automower.png husq-automower.png image/png
host.raspberrypi 2020-05-31 15:30:34.285 info iobroker upload [1] husq-automower.admin /opt/iobroker/node_modules/iobroker.husq-automower/admin/husq-automower2.png husq-automower2.png image/png
host.raspberrypi 2020-05-31 15:30:34.229 info iobroker upload [2] husq-automower.admin /opt/iobroker/node_modules/iobroker.husq-automower/admin/index.html index.html text/html
host.raspberrypi 2020-05-31 15:30:34.172 info iobroker upload [3] husq-automower.admin /opt/iobroker/node_modules/iobroker.husq-automower/admin/index_m.html index_m.html text/html
host.raspberrypi 2020-05-31 15:30:34.090 info iobroker upload [4] husq-automower.admin /opt/iobroker/node_modules/iobroker.husq-automower/admin/words.js words.js application/javascript
host.raspberrypi 2020-05-31 15:28:40.547 info iobroker npm install https://github.com/truegreyhound/ioBroker.husq-automower/tarball/e63e7ee2227701f18e256433f4ae97ac540c602b --loglevel error --prefix "/opt/iobroker" (System call)
host.raspberrypi 2020-05-31 15:28:40.544 info iobroker NPM version: 6.14.5
host.raspberrypi 2020-05-31 15:28:39.917 info iobroker install https://github.com/truegreyhound/ioBroker.husq-automower/tarball/e63e7ee2227701f18e256433f4ae97ac540c602b
host.raspberrypi 2020-05-31 15:28:37.276 info iobroker url "https://github.com/truegreyhound/ioBroker.husq-automower"

`

Any idea how to fix it?

husq-automower.x.mower.action 92 does not work wit 430x

husq-automower.x.mower.action 92 does not work wit 430x.
After i send via this adapter the proposed instruction 92, nothing changed on my automower and in the app ( automower was manually parked via instruction 3 from this adapter).

In the App and on the status of this adapter i see always " parked until further notice".
Via app it was possible to reactivate the sheduler and status information was also updated.

husq-automower startet in iobroker nicht mehr

Hallo zusammen,
der Adapter in Version 1.1.2 startet seit Update von iobroker nicht mehr.

Node.js: 18.18.0
NPM: 9.8.1
iobroker: 5.0.12

Hier werden folgende Fehler geloggt:

host.raspberrypi | 2023-09-19 18:27:24.513 | info | Rebuild for adapter system.adapter.husq-automower.0 not successful in 3 tries. Adapter will not be restarted again. Please execute "npm install --production" in adapter directory manually.
host.raspberrypi | 2023-09-19 18:27:24.513 | error | instance system.adapter.husq-automower.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
host.raspberrypi | 2023-09-19 18:27:24.513 | error | Caught by controller[0]: Node.js v18.18.0
host.raspberrypi | 2023-09-19 18:27:24.513 | error | Caught by controller[0]: }
host.raspberrypi | 2023-09-19 18:27:24.513 | error | Caught by controller[0]: ]
host.raspberrypi | 2023-09-19 18:27:24.512 | error | Caught by controller[0]: '/opt/iobroker/node_modules/iobroker.husq-automower/main.js'
host.raspberrypi | 2023-09-19 18:27:24.512 | error | Caught by controller[0]: '/opt/iobroker/node_modules/iobroker.husq-automower/lib/utils.js',
host.raspberrypi | 2023-09-19 18:27:24.512 | error | Caught by controller[0]: requireStack: [
host.raspberrypi | 2023-09-19 18:27:24.512 | error | Caught by controller[0]: code: 'MODULE_NOT_FOUND',
host.raspberrypi | 2023-09-19 18:27:24.512 | error | Caught by controller[0]: at Module.require (node:internal/modules/cjs/loader:1143:19) {
host.raspberrypi | 2023-09-19 18:27:24.511 | error | Caught by controller[0]: at Module._load (node:internal/modules/cjs/loader:960:12)
host.raspberrypi | 2023-09-19 18:27:24.511 | error | Caught by controller[0]: at Module.load (node:internal/modules/cjs/loader:1119:32)
host.raspberrypi | 2023-09-19 18:27:24.511 | error | Caught by controller[0]: at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
host.raspberrypi | 2023-09-19 18:27:24.511 | error | Caught by controller[0]: at Module._compile (node:internal/modules/cjs/loader:1256:14)
host.raspberrypi | 2023-09-19 18:27:24.511 | error | Caught by controller[0]: at Object. (/opt/iobroker/node_modules/iobroker.husq-automower/lib/utils.js:63:25)
host.raspberrypi | 2023-09-19 18:27:24.511 | error | Caught by controller[0]: at require (node:internal/modules/cjs/helpers:119:18)
host.raspberrypi | 2023-09-19 18:27:24.510 | error | Caught by controller[0]: at Module.require (node:internal/modules/cjs/loader:1143:19)
host.raspberrypi | 2023-09-19 18:27:24.510 | error | Caught by controller[0]: at Module._load (node:internal/modules/cjs/loader:922:27)
host.raspberrypi | 2023-09-19 18:27:24.510 | error | Caught by controller[0]: at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15)
host.raspberrypi | 2023-09-19 18:27:24.510 | error | Caught by controller[0]: - /opt/iobroker/node_modules/iobroker.husq-automower/main.js
host.raspberrypi | 2023-09-19 18:27:24.510 | error | Caught by controller[0]: - /opt/iobroker/node_modules/iobroker.husq-automower/lib/utils.js
host.raspberrypi | 2023-09-19 18:27:24.509 | error | Caught by controller[0]: Require stack:
host.raspberrypi | 2023-09-19 18:27:24.509 | error | Caught by controller[0]: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js'
host.raspberrypi | 2023-09-19 18:27:24.509 | error | Caught by controller[0]: ^
host.raspberrypi | 2023-09-19 18:27:24.509 | error | Caught by controller[0]: throw err;
host.raspberrypi | 2023-09-19 18:27:24.508 | error | Caught by controller[0]: node:internal/modules/cjs/loader:1080

Hat jemand eine Idee wo hier das Problem liegen könnte?
Alle anderen Adapter in dem System laufen fehlerfrei.
Danke und Grüße

Is this adapter still maintained ? Changes for js-controll 5 required

Thank you very much for your work.

This adapter requires modifications for use with js-controller5

Please let us know whether you plan to fix this. If you need any help, please let us know.

If you are no longer interested in maintaining this adapter, please consider releasing the repository to iobroker-community-adapters. Will guide through tranfer if this ok for you.

Waiting for feedback
Thanks in advance

Fehler im Protokoll

(28154) checkAMatHome dist > mMaxDistance: 9300.953960824461
Was bedeutet das?

Compatibility check and testing for Node.js 14 and 16

Dear Adapter develop,

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!

Adapter not connecting anymore

Hi there,

since yesterday 10 AM the adapter sint working for me anymore. I restart the instance etc. but it dont seem to connect.

I see that the last http status was a 404 so i guess maybe Husqvarna changed something on the API ? Can someone confirm this ?

Think about to fix the issues found by adapter checker

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/truegreyhound/ioBroker.husq-automower

  • [E144] common.installedFrom field found in io-package.json. Must be removed.
  • [E301] Tests on Travis-ci.org are broken. Please fix.

I have also found warnings that may be fixed if possible.

  • [W113] Adapter should support compact mode
  • [W400] Cannot find "husq-automower" in latest repository

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

fehlende Daten

ich habe den neuen 435x awd und vermisse die folgenden Funktionen.

Einstellen der Schnitthöhe von 1..9. Usecase: Jahreszeitabhängig bzw. Feuchtigkeitsabhängig umstellen
Einschalten der Scheinwerfer: Usecase: Der Robbi soll ohne Licht auch Nachts fahren, wenn aber eine Bewegung immGarten detektiert wird soll er mit Licht fahren

Wäre super, wenn diese beiden schaltkommandos noch Eingang finden würden.

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.