Giter Site home page Giter Site logo

homebridge-zp's Introduction

Homebridge ZP

Downloads Version Homebridge Discord verified-by-homebridge

GitHub issues GitHub pull requests JavaScript Style Guide

Homebridge plugin for Sonos Zone Players

Copyright © 2016-2024 Erik Baauw. All rights reserved.

This Homebridge plugin exposes Sonos zone players to Apple's HomeKit. It provides the following features:

  • Automatic discovery of Sonos zones, taking into account stereo pairs and home theatre setup;
  • Support for Sonos groups, created through the Sonos app;
  • Control from HomeKit of play/pause, sleep timer, next/previous track, volume, and mute per Sonos group;
  • Control from HomeKit of input selection per group, from Sonos favourites and local sources, like LineIn, Airplay;
  • Optional control from HomeKit of volume, mute, balance, bass, treble, loudness, night sound, and speech enhancement per Sonos zone;
  • Optional control from HomeKit for Sonos zones leaving Sonos groups, and for Sonos zones creating/joining one Sonos group;
  • Optional control from HomeKit to enable/disable Sonos alarms;
  • Real-time monitoring from HomeKit of state per Sonos group and, optionally, per Sonos zone. Like the Sonos app, Homebridge ZP subscribes to zone player events to receive notifications;
  • Optional control from HomeKit for the status LED and child lock per zone player. Note that Sonos doesn't support events for these, so Homebridge ZP cannot provide real-time monitoring for this;
  • Includes command-line tools, for controlling Sonos zone players and for troubleshooting.

Prerequisites

You need a server to run Homebridge. This can be anything running Node.js: from a Raspberry Pi, a NAS system, or an always-on PC running Linux, macOS, or Windows. See the Homebridge Wiki for details. I run Homebridge ZP on a Raspberry Pi 3B+.

To interact with HomeKit, you need Siri or a HomeKit app on an iPhone, Apple Watch, iPad, iPod Touch, or Apple TV (4th generation or later). I recommend to use the latest released versions of iOS, watchOS, and tvOS.
Please note that Siri and even Apple's Home app still provide only limited HomeKit support. To use the full features of Homebridge Zp, you might want to check out some other HomeKit apps, like the Eve app (free) or Matthias Hochgatterer's Home+ app (paid).

As Sonos uses UPnP to discover the zone players, the server running Homebridge must be on the same subnet as your Sonos zone players. As HomeKit uses Bonjour to discover Homebridge, the server running Homebridge must be on the same subnet as your iDevices running HomeKit. For remote access and for HomeKit automations, you need to setup an Apple TV (4th generation or later), HomePod, or iPad as home hub.

Zones

Homebridge ZP creates an accessory per Sonos zone, named after the zone, e.g. Living Room Sonos for the Living Room zone. By default, this accessory contains a single Switch service, with the same name as the accessory. The standard On characteristic is used for play/pause control. Additional characteristics control volume, select input, change track, etc. However, neither Apple's Home app nor Siri support these.

To control the volume from Apple's Home app and/or Siri, the type of the service, as well as the type of characteristic used for volume can be changed from config.json, see Configuration and issue #10. Note that speaker support in Apple's Home app is based on the AirPlay2 protocol. Despite the "HomeKit" branding, technically, this has nothing to do with HomeKit. No Homebridge plugin can expose speakers that look like AirPlay2 speakers in the Home app. Also note that these Airplay2 speakers cannot be accessed by other HomeKit apps.

When "tv": true is set in config.json, Homebridge ZP creates an additional Television accessory per zone, allowing input selection from Apple's Home app and control from the Remote widget. Note that Apple has imposed some technical restrictions on Television accessories:

  • They cannot be bridged; they need to be paired to HomeKit individually;
  • They cannot be accessed by HomeKit apps; only from Apple's Home app.

Groups

When multiple Sonos zones, e.g. Living Room and Kitchen, are grouped into one Sonos group, the Sonos app shows them as a single room, e.g. Living Room + 1, with shared control for play/pause, music source, and (group) volume and mute. When this group is broken, each zone forms a separate standalone group, containing only that zone. The Sonos app shows each standalone group as a separate room, with separate control per room for play/pause, music source, and (zone) volume and mute.

If Homebridge ZP would mimic this behaviour, dynamically creating and deleting accessories for groups, HomeKit would lose the assignment to HomeKit rooms, groups, scenes, and automations, every time an accessory is deleted. Consequently, you would have to reconfigure HomeKit each time you group or ungroup Sonos zones.

To overcome this, Homebridge ZP creates an accessory and corresponding service for each Sonos zone. This service actually controls the Sonos group the zone is in rather than the zone. When separated, the Living Room Sonos service controls the standalone Living Room group, consisting of only the Living Room zone; and the Kitchen Sonos service controls the standalone Kitchen group, consisting of only the Kitchen zone. When grouped, both the Living Room Sonos service and the Kitchen Sonos service control the multi-zone Living Room + 1 group, containing both the Living Room and Kitchen zones. The Sonos Group characteristic shows which group the zone belongs to, or rather: the name of the group coordinator zone, in this example: Living Room.

So when grouped, changing the Living Room Sonos Volume changes the volume of both the Living Room zone and the Kitchen zone. So does changing the Kitchen Sonos Volume. When ungrouped, changing the Living Room Sonos Volume only changes the volume of the Living Room zone; and changing the Kitchen Sonos Volume only changes the volume of the Kitchen zone.

Speakers

To change the volume of an individual zone in a multi-zone group, an additional Volume characteristic is needed for the zone, next to the Volume characteristic for the group. As HomeKit doesn't support multiple characteristics of the same type per service, it actually requires an additional service. By specifying "speakers": true in config.json, Homebridge ZP creates an additional Speakers service for each zone accessory, to control the individual zone. This service is named after the zone as well, in our example: Living Room Speakers.

The Speakers service On characteristic is used to join, or leave a Sonos group. On is set, when the zone is a member of other zone's group. It is clear, when the zone is the coordinator of it's own group (either standalone or with other zones as member). By setting On, the zone will join groups with the target coordinator. The target coordinator is set using the Sonos Coordinator characteristic in the Sonos service. By clearing On, the zone will leave the group and become coordinator of a standalone group.

Additional characteristics for Volume, Mute, Bass, Treble, and Loudness control the corresponding zone attributes. Note that Bass, Treble, and Loudness are custom characteristics. They might not be supported by all HomeKit apps, see Caveats below.

Like the Sonos service, the type of the Speakers service can be changed in config.json from the default Switch.

Command-Line Tool

Homebridge ZP includes a command-line tool, zp, to interact with your Sonos Zone Players from the command line. It takes a -h or --help argument to provide a brief overview of its functionality and command-line arguments.

Installation

To install Homebridge ZP:

  • Follow the instructions on the Homebridge Wiki to install Node.js and Homebridge;
  • Install the Homebridge ZP plugin through Homebridge Config UI X or manually by:
    $ sudo npm -g i homebridge-zp
    
  • Edit config.json and add the ZP platform provided by Homebridge ZP, see Configuration.

Configuration

In Homebridge's config.json you need to specify Homebridge ZP as a platform plugin:

  "platforms": [
    {
      "platform": "ZP"
    }
  ]

The following optional parameters can be added to modify Homebridge ZP's behaviour:

Key Default Description
address (discovered) The IP address for the web server Homebridge ZP creates to receive notifications from Sonos zone players. This must be an IP address of the server running Homebridge ZP, reachable by the zone players. You might need to set this on a multi-homed server, if Homebridge ZP binds to the wrong network interface.
alarms false Flag whether to expose an additional service per Sonos alarm.
brightness false Flag whether to expose volume as Brightness when service is "switch" or "speaker". Setting this flag enables volume control from Siri, but not from Apple's Home app.
excludeAirPlay false Flag whether not to expose zone players that support Airplay, since they natively show up in Apple's Home app.
forceS2 false Flag whether to expose only S2 zone players. See Split Sonos System below.
heartrate (disabled) Interval (in seconds) to poll zone players when leds is set.
leds false Flag whether to expose an additional Lightbulb service per zone for the status LED. This also supports locking the physical controls.
nameScheme "% Sonos" The name scheme for the HomeKit accessories. % is replaced with the zone name. E.g. with the default name scheme, the accessory for the Kitchen zone is set to Kitchen Sonos. Note that this does not change the names of the HomeKit services, used by Siri.
port 0 (random) The port for the web server Homebridge ZP creates to receive notifications from Sonos zone players.
resetTimeout 500 Timeout (in milliseconds) to reset input (e.g. Change Volume).
service "switch" Defines what type of service and volume characteristic Homebridge ZP uses. Possible values are: "switch" for Switch and Volume; "speaker" for Speaker and Volume; "light" for LightBulb and Brightness; and "fan" for Fan and Rotation Speed. Selecting "light" or "fan" enables changing the Sonos volume from Siri and from Apple's Home app. Selecting "speaker" results in a not supported accessory in Apple's Home app.
speakers false Flag whether to expose a second Speakers service per zone, in addition to the standard Sonos service, see Speakers. You might want to set this if you're using Sonos groups in a configuration of multiple Sonos zones.
subscriptionTimeout 30 The duration (in minutes) of the subscriptions Homebridge ZP creates with each zone player.
timeout 15 The timeout (in seconds) to wait for a response from a Sonos zone player.
tv false Create an additional, non-bridged TV accessory for each zone.
Note that each TV accessory needs to be paired with HomeKit separately, using the same pin as for Homebridge, as specified in config.json.
tvIdPrefix TV Prefix for serial number of TV accessories, to enable multiple instances of Homebridge ZP on the same network.

Below is an example config.json that exposes the Sonos and Speakers service as a HomeKit Speaker and volume as Brightness, so it can be controlled from Siri:

  "platforms": [
    {
      "platform": "ZP",
      "service": "speaker",
      "brightness": true,
      "speakers": true
    }
  ]

Split Sonos System

If you have a split Sonos system, Homebridge ZP will expose both the S2 and the S1 zone players. Of course you can only group S2 zone players with other S2 zone players; and S1 zone players with other S1 zone players.
The same restriction applies when you have multiple Sonos households on your network: you can only group zone players with other zone players in the same household.

Troubleshooting

Check Dependencies

If you run into Homebridge startup issues, please double-check what versions of Node.js and of Homebridge have been installed. Homebridge ZP has been developed and tested using the latest LTS version of Node.js and the latest version of Homebridge. Other versions might or might not work - I simply don't have the bandwidth to test these.

Run Homebridge ZP Solo

If you run into Homebridge startup issues, please run a separate instance of Homebridge with only Homebridge ZP (and Homebridge Config UI X) enabled in config.json. This way, you can determine whether the issue is related to Homebridge ZP itself, or to the interaction of multiple Homebridge plugins in your setup. You can start this separate instance of Homebridge on a different system, as a different user, or from a different user directory (specified by the -U flag). Make sure to use a different Homebridge name, username, and (if running on the same system) port in the config.json for each instance.

Debug Log File

Homebridge ZP outputs an info message for each HomeKit characteristic value it sets and for each HomeKit characteristic value change notification it receives. When Homebridge is started with -D, Homebridge ZP outputs a debug message for each request it makes to a Sonos zone player and for each zone player notification event it receives.

To capture these messages into a log file do the following:

  • If you're running Homebridge as a service, stop that service;
  • Run Homebridge manually, capturing the output into a file, by issuing:
    $ homebridge -CD 2>&1 | tee homebridge.log
    
  • Interact with your devices, through their native app and or through HomeKit to trigger the issue;
  • Hit interrupt (ctrl-C) to stop Homebridge;
  • If you're running Homebridge as a service, restart the service;
  • Compress the log file by issuing:
    $ gzip homebridge.log
    

Web Server

Like the Sonos app, Homebridge ZP subscribes to the zone player events to be notified in real-time of changes. It creates a web server to receive these notifications. The IP address and port number for this listener are logged in a debug message, e.g.

[1/1/2020, 11:58:35 AM] [Sonos] listening on http://192.168.x.x:58004/notify

To check whether the listener is reachable from the network, open this URL in your web browser. You should see an overview of the active subscriptions per zone player.

Getting Help

If you have a question, please post a message to the #zp channel of the Homebridge community on Discord.

If you encounter a problem, please open an issue on GitHub. Please attach a copy of homebridge.log.gz to the issue, see Debug Log File. Please do not copy/paste large amounts of log output.

Caveats

Homebridge ZP is a hobby project of mine, provided as-is, with no warranty whatsoever. I've been running it successfully at my home for years, but your mileage might vary.

The HomeKit terminology needs some getting used to. An accessory more or less corresponds to a physical device, accessible from your iOS device over WiFi or Bluetooth. A bridge (like Homebridge) is an accessory that provides access to other, bridged, accessories. An accessory might provide multiple services. Each service corresponds to a virtual device (like a lightbulb, switch, motion sensor, ..., but also: a programmable switch button, accessory information, battery status). Siri interacts with services, not with accessories. A service contains one or more characteristics. A characteristic is like a service attribute, which might be read or written by HomeKit apps. You might want to checkout Apple's HomeKit Accessory Simulator, which is distributed as an additional tool for Xcode.

The Sonos terminology needs some getting used to. A zone corresponds to a physical room. It consists of a single zone player, two zone players configured as a stereo pair, or a home theatre setup (e.g. a PlayBar with separate surround speakers). Typically, zone setup is static; you would only change it when physically re-arranging your zone players between rooms. A zone group is a collection of one or more zones, playing the same music in sync. A zone group is controlled by its coordinator zone. Typically, groups are dynamic, you add and/or remove zones to/from a group when listening to your music. Controls for play/pause and music source act on a zone group. Controls for volume and mute act on a zone group or on a single zone. Controls for bass, treble, and loudness act on a single zone. Note that Sonos uses the term room ambiguously: on the Sonos app main screen it corresponds to a zone group, but in the Room Settings it corresponds to a zone.

homebridge-zp's People

Contributors

codepeon avatar daberlin avatar dariusrosendahl avatar ebaauw avatar himynameisjonas 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

homebridge-zp's Issues

Speakers not exposed

Hello,

I have installed the all these components in a Rasperry PI model B, but even when the homebridge is up and running and seems (reviewing the debugging file) that speakers have been found I can not see in the iPhone Home App.

Could you please let me know what could we doing wrongly or what still pending?

Attached you can find the config and log file.

Thanks in Advance
Cris.

config.json.txt
logfile.txt

volume not change equally in one group

I have 1 play5, 1 play3, 2 paired play1 in one group. delete "speaker: true" in config.json

As change the volume of ANY player in Home APP, volume of others automatically changed to the same number. BUT, this normal is only happened in Home APP. Actually, play5 changes a lot and others change a little every time.

Is this all be normal?

Support for input selection

Provide some basic support for selecting input. At least TV, Line-In, Sonos Favourites, and Next/Previous track.

EADDRINUSE

[2018-9-5 15:08:02] [ZP] uncaught exception
[2018-9-5 15:08:02] [ZP] { Error: listen EADDRINUSE :::51828
at Object._errnoException (util.js:992:11)
at _exceptionWithHostPort (util.js:1014:20)
at Server.setupListenHandle [as _listen2] (net.js:1355:14)
at listenInCluster (net.js:1396:12)
at Server.listen (net.js:1480:7)
at PeoplePlatform.startServer (/usr/lib/node_modules/homebridge-people/index.js:120:24)
at PeoplePlatform.accessories (/usr/lib/node_modules/homebridge-people/index.js:60:14)
at Server._loadPlatformAccessories (/usr/lib/node_modules/homebridge/lib/server.js:386:20)
at Server._loadPlatforms (/usr/lib/node_modules/homebridge/lib/server.js:330:16)
at Server.run (/usr/lib/node_modules/homebridge/lib/server.js:86:36)
code: 'EADDRINUSE',
errno: 'EADDRINUSE',
syscall: 'listen',
address: '::',
port: 51828 }

Any idea why thats happening?
Regards

dependencies not met

Just a quick note to say when I try and run this it doesn't work.

This is because you don't have request and xmljs in the package.json

  "dependencies": {
    "sonos": "^0.12.1",
    "request": "^2.65.0",
    "xml2js": "0.4.17"
  },

This means when doing npm install now everything should work fine.

Alarms are not showing up as switches.

In my config file i have set
"alarms": true

And my homebridge log shows the following

[2018-5-10 11:37:30] [ZP] Bedroom Sonos: alarm Top 100 tracks currently in Sweden (06:40:00) changed from undefined to false
[2018-5-10 11:37:30] [ZP] Bedroom Sonos: alarm Top 100 tracks currently in Sweden (06:34:00) changed from undefined to false
[2018-5-10 11:37:30] [ZP] Bedroom Sonos: alarm Top 100 tracks currently in Sweden (06:31:00) changed from undefined to false
[2018-5-10 11:37:30] [ZP] Bedroom Sonos: alarm Top 100 tracks currently in Sweden (06:25:00) changed from undefined to false
[2018-5-10 11:37:30] [ZP] Bedroom Sonos: alarm Sonos Chime (20:11:55) changed from undefined to false

But i do not see any switches for my alarms, the plugin adds switches for my speakers and they work perfectly.

Receive error: "uncaught exception" when http request not handled from another plugin

Hi there,

Thanks for all the work you've put into homebridge-zp, it's been working pretty much perfectly for me for the last few months. However, recently, I have started using this plugin to control a relay connected to a NodeMCU which usually works perfectly. The problem comes when the NodeMCU is either offline or unreachable; when this happens I get the following from homebridge followed by homebridge shutting down:

[2018-8-8 22:41:22] [Misters] Setting power state to on
[2018-8-8 22:41:26] [ZP] uncaught exception
[2018-8-8 22:41:26] [ZP] Error: connect EHOSTUNREACH 192.168.1.146:80
    at doRequest (/usr/local/lib/node_modules/homebridge-http-sprinkler/node_modules/sync-request/index.js:31:11)
    at HttpSprinkler.setPowerState (/usr/local/lib/node_modules/homebridge-http-sprinkler/index.js:190:13)
    at emitMany (events.js:147:13)
    at Characteristic.Active.emit (events.js:224:7)
    at Characteristic.Active.Characteristic.setValue (/usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Characteristic.js:320:10)
    at Bridge.<anonymous> (/usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Accessory.js:871:22)
    at Array.forEach (<anonymous>)
    at Bridge.Accessory._handleSetCharacteristics (/usr/local/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Accessory.js:811:8)
    at emitMany (events.js:147:13)
    at HAPServer.emit (events.js:224:7)
[2018-8-8 22:41:26] Got SIGTERM, shutting down Homebridge...
[2018-8-8 22:41:26] [ZP] cleaning up...
[2018-8-8 22:41:31] [ZP] exit

As you can see, I believe it is homebridge-zp which is causing homebridge to crash which is not great. I am unsure as to why homebridge-zp causes an exit when this happens as it has nothing to do with the other plugin.

I would really appreciate it if you could help me figure out how to stop this from happening in the future as it is rather inconvenient to have to restart homebridge every time there is some problem to do with the NodeMCU.

Thank you in advance for any help,

Kind regards, Tom

P.S. I have homebridge running on a Raspberry Pi wirelessly. To clarify, there is no issue when there is no issue with the connection to the NodeMCU, this only happens when the NodeMCU is unreachable

Homebridge crashes

Hello, I have rebuilt my system and now Homebridge does not start anymore.
I get this error message and ask for help.

[2018-9-21 11:19:36] [ZP] uncaught exception
[2018-9-21 11:19:36] [ZP] TypeError: Cannot read property 'identity' of undefined
at Client. (/usr/local/lib/node_modules/homebridge-harmonyhub/node_modules/harmonyhubjs-client/lib/login/hub.js:59:20)
at Client.emit (events.js:160:13)
at Client.handleStanza (/usr/local/lib/node_modules/homebridge-harmonyhub/node_modules/harmonyhubjs-client/node_modules/node-xmpp-client/lib/Client.js:228:12)
at Client.onStanza (/usr/local/lib/node_modules/homebridge-harmonyhub/node_modules/harmonyhubjs-client/node_modules/node-xmpp-client/lib/Client.js:222:8)
at Connection.emit (events.js:160:13)
at Connection.onStanza (/usr/local/lib/node_modules/homebridge-harmonyhub/node_modules/harmonyhubjs-client/node_modules/node-xmpp-client/node_modules/node-xmpp-core/lib/Connection.js:369:10)
at StreamParser. (/usr/local/lib/node_modules/homebridge-harmonyhub/node_modules/harmonyhubjs-client/node_modules/node-xmpp-client/node_modules/node-xmpp-core/lib/Connection.js:226:10)
at StreamParser.emit (events.js:160:13)
at SaxLtx. (/usr/local/lib/node_modules/homebridge-harmonyhub/node_modules/harmonyhubjs-client/node_modules/node-xmpp-client/node_modules/node-xmpp-core/lib/StreamParser.js:58:14)
at SaxLtx.emit (events.js:160:13)
[2018-9-21 11:19:36] Got SIGTERM, shutting down Homebridge...
[2018-9-21 11:19:36] [ZP] cleaning up...
[2018-9-21 11:19:37] [Big Ass Fan] Found a light for: Ventilator Schlafzimmer Fan Light
[2018-9-21 11:19:38] [Calendar] Pushing calendar sensor 'Geburtstag' state 0 - value 0
[2018-9-21 11:19:38] [Calendar] No events to schedule.
[2018-9-21 11:19:38] [Calendar] Pushing calendar sensor 'Urlaub' state 0 - value 0
[2018-9-21 11:19:38] [Calendar] No events to schedule.
[2018-9-21 11:19:38] [Calendar] Pushing calendar sensor 'Abfall' state 0 - value 0
[2018-9-21 11:19:38] [Calendar] Pushing calendar sensor 'Restabfall' state 0 - value 0
[2018-9-21 11:19:38] [Calendar] Pushing calendar sensor 'Gelber Sack' state 0 - value 0
[2018-9-21 11:19:38] [Calendar] Scheduling next action in 86400000ms
[2018-9-21 11:19:39] [ZP] Initializing platform accessory 'Kueche Sonos'...
[2018-9-21 11:19:39] [ZP] Initializing platform accessory 'Bad2 Sonos'...
[2018-9-21 11:19:39] [ZP] Initializing platform accessory 'Schlafzimmer Sonos'...
[2018-9-21 11:19:39] [ZP] Initializing platform accessory 'Wohnzimmer Sonos'...
[2018-9-21 11:19:39] [ZP] Schlafzimmer Sonos: coordinator for group Schlafzimmer
[2018-9-21 11:19:39] [ZP] Kueche Sonos: coordinator for group Kueche
[2018-9-21 11:19:39] [ZP] Kueche Sonos: platform coordinator
[2018-9-21 11:19:39] [ZP] Wohnzimmer Sonos: set power (play/pause) from undefined to true
[2018-9-21 11:19:39] [ZP] Bad2 Sonos: member of group Kueche Sonos
[2018-9-21 11:19:39] [ZP] Wohnzimmer Sonos: member of group Kueche Sonos
[2018-9-21 11:19:39] [ZP] Bad2 Sonos: set power (play/pause) from undefined to true
[2018-9-21 11:19:39] [ZP] Schlafzimmer Sonos: unknown track metadata {"$":{"id":"-1","parentID":"-1","restricted":"true"},"res":[{"
":"x-rincon-mp3radio://http://stream.radiohamburg.de/rhh-live/mp3-192/tunein/play.m3u","$":{"protocolInfo":"x-rincon-mp3radio::audio/mpegurl:"}}],"r:streamContent":[""],"r:radioShowMd":[""],"upnp:albumArtURI":["/getaa?u=x-rincon-mp3radio%3a%2f%2fhttp%3a%2f%2fstream.radiohamburg.de%2frhh-live%2fmp3-192%2ftunein%2fplay.m3u&v=398"],"dc:title":["Playlist"],"upnp:class":["object.item"]}
[2018-9-21 11:19:39] [ZP] Schlafzimmer Sonos: set power (play/pause) from undefined to false
[2018-9-21 11:19:39] [ZP] Schlafzimmer Sonos: set current track from undefined to "Playlist"
[2018-9-21 11:19:39] [ZP] Kueche Sonos: set power (play/pause) from undefined to false
[2018-9-21 11:19:39] [ZP] Kueche Sonos: set current track from undefined to "Radio Hamburg"
[2018-9-21 11:19:39] [ZP] Schlafzimmer Sonos: set group volume from undefined to 24
[2018-9-21 11:19:39] [ZP] Schlafzimmer Sonos: set group mute from undefined to false
[2018-9-21 11:19:39] [ZP] Kueche Sonos: set group volume from undefined to 33
[2018-9-21 11:19:39] [ZP] Kueche Sonos: set group mute from undefined to false
[2018-9-21 11:19:40] [Hue] Philips hue: Philips BSB002 bridge v1806051111, api v1.26.0
[2018-9-21 11:19:40] [Hue] Philips hue: 4 accessories
[2018-9-21 11:19:40] [Hue] masked debug info dumped to /root/.homebridge/homebridge-hue.json.gz
[2018-9-21 11:19:40] [Hue] Initializing platform accessory 'Philips hue'...
[2018-9-21 11:19:40] [Hue] Philips hue: 3 services
[2018-9-21 11:19:40] [Hue] Initializing platform accessory 'xxxxx '...
[2018-9-21 11:19:40] [Hue] Initializing platform accessory 'XFDAnybodyHome'...
[2018-9-21 11:19:40] [Hue] Initializing platform accessory 'xxx'...
[2018-9-21 11:19:41] [ZP] exit

Support for Nightsound / Speech Enhancement

Since there is support for things like volume, mute, bass, treble and loudness, i'd like to know if it's possible to add support for Nightsound and Speech Enhancement?

Right now i'm able to toggle night sound on/off with homebridge-http plus the SONOS HTTP API. But it's unreliable for me an because it's a simple switch it doesn't get the current state.

Is implementation planned maybe?

Automatic grouping behaviour.

Provide more user influence on grouping behaviour. Probably by provide a boolean Grouping characteristic to create/join a group when true or leave/break the group on false. The On characteristic would just play/pause the group from any member.

Setting sleep timer causes the current track to pause

I've been trying to figure this out for a while and just realized that it's homebridge-zp causing the problem when I tailed the log. With music playing when I select a sleep timer the track pauses and needs to be restarted. Log looks like this:
[ZP] Office Sonos: current track changed from Yellow Submarine to The Curse Of Comfort
[ZP] Office Sonos: power (play/pause) changed from true to undefined
[ZP] Office Sonos: set power (play/pause) from undefined to false
[ZP] Office Sonos: current track changed from The Curse Of Comfort to undefined
[ZP] Office Sonos: power (play/pause) changed from undefined to false
[ZP] Office Sonos: current track changed from undefined to The Curse Of Comfort
This happens every time I select a sleep timer duration or change the duration.
Thanks for looking into this!

Airplay 2

Hey there,

I really appreciate the work you've put into this plugin and it's made a real difference being able to automate my Sonos speakers! My current setup is simply four Play:1 s but I'm looking to get an outdoor speaker system set up. As a result, I've been waiting for Airplay 2 so that I can use an AirPort Express as the receiver for this new system. I was original hoping that Sonos would release AirPlay 2 compatibility with all of their products but it is clear from their blog post here that this is not the case. As a result I think I will go with the option of buying a Play:5 or another Airplay 2 compatible speaker and using that as the hub for my incompatible speakers as mentioned in their post so that I can stream audio to my Sonos and also outdoors.

Following this, there were a number of questions I still had which I was hoping you'd be able to give me some guidance with. The first question I admittedly am not sure whether you'll be able to help with but hey it's worth a shot! I was wondering whether in theory it would be possible to create some sort of server that could run, similar to node-sonos-http-api which would expose the previously non AirPlay 2 compatible Play:1s as Airplay 2 speakers both within the Home app and more importantly for multi-room audio without the need to buy the Play:5 or such like as this would be ideal.

My next question is one I'm sure you'll know the answer to. If I were to buy a Play:5, I assume that it would appear in the Home app as a speaker without the use of your plugin. However, if I were to still use your plugin for the rest of my speakers, would this then make a duplicate of this new speaker inside the home app? If so, is there a way for homebridge-zp to ignore certain speakers on a network?

My final question is more of an aesthetic concern than a practical one. I am currently showing the exposed Sonos speakers as fans in the home app as this is the only way to have volume control within the app. When AirPlay 2 is released, will the "speaker" option work rather than having to show them as fans?

Thank you in advance for your help!
Kind regards,
Tom

Request- Volume limit

Request for a way to limit the maximum volume or a way to not have the volume go to 100 when turning on. Using the 'light' Service.

Sonos Alarms crash due to TypeError of 'Service' undefined

Having "Alarms" set to true, ZP works without problems as long as I don't add any alarm.
As soon as there is an alarm, ZP crashes during boot with this message:

[2018-10-3 10:53:25] [ZP] uncaught exception
TypeError: Cannot read property 'Service' of undefined
at new ZpAlarm (/usr/local/lib/node_modules/homebridge-zp/lib/ZpAlarm.js:42:25)
at new ZpAccessory (/usr/local/lib/node_modules/homebridge-zp/lib/ZpAccessory.js:125:31)
at listen (/usr/local/lib/node_modules/homebridge-zp/lib/ZpPlatform.js:179:27)
at Server.server.listen (/usr/local/lib/node_modules/homebridge-zp/lib/ZpPlatform.js:255:12)
at Object.onceWrapper (events.js:313:30)
at emitNone (events.js:106:13)
at Server.emit (events.js:208:7)
at emitListeningNT (net.js:1387:10)
at _combinedTickCallback (internal/process/next_tick.js:136:11)
at process._tickCallback (internal/process/next_tick.js:181:9)

This is my HB/ZP setup:
root@homebridge1:~/.homebridge# npm -g list --depth=1
/usr/local/lib
+-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| `-- [email protected]

+-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| +-- [email protected]
| `-- [email protected]

Any guess?

Issues after latest homebridge update (homebridge 0.4.28)

[10/13/2017, 9:25:13 AM] ====================
[10/13/2017, 9:25:13 AM] ERROR LOADING PLUGIN homebridge-zp:
[10/13/2017, 9:25:13 AM] Error: Plugin /usr/local/lib/node_modules/homebridge-zp requires Node version of ^6.10.3 which does not satisfy the current Node version of v7.1.0. You may need to upgrade your installation of Node.
at Plugin.load (/usr/local/lib/node_modules/homebridge/lib/plugin.js:63:11)
at Server. (/usr/local/lib/node_modules/homebridge/lib/server.js:136:14)
at Array.forEach (native)
at Server._loadPlugins (/usr/local/lib/node_modules/homebridge/lib/server.js:132:22)
at new Server (/usr/local/lib/node_modules/homebridge/lib/server.js:51:24)
at module.exports (/usr/local/lib/node_modules/homebridge/lib/cli.js:26:16)
at Object. (/usr/local/lib/node_modules/homebridge/bin/homebridge:17:22)
at Module._compile (module.js:573:32)
at Object.Module._extensions..js (module.js:582:10)
at Module.load (module.js:490:32)
at tryModuleLoad (module.js:449:12)
at Function.Module._load (module.js:441:3)
at Module.runMain (module.js:607:10)
at run (bootstrap_node.js:420:7)
at startup (bootstrap_node.js:139:9)
at bootstrap_node.js:535:3
[10/13/2017, 9:25:13 AM] ====================

I'm not sure what the problem is exactly but everything was working perfectly before updating home bridge today.

Support for Sonos Alarms

Hi @ebaauw,

Would there be any scope to surface a HomeKit switch to enable/disable an "alarm" (in Sonos terminology) that had been set via the Sonos app? I would ideally like to be able to enable/disable my alarms via a HomeKit automation.

Thanks!
Alex

P.S - awesome work on both this, and homebridge-hue. Both working like a dream, including the new programmable switch fixes in 0.3.15.

Unpredictable grouping behaviour in scenes

I have noticed some unpredictability when it comes to grouping speakers using scenes. For example, I have an automation that runs at 6:00 each morning to ungroup all speakers (all speakers: power = false), then another automation at 6:01 that groups two speakers together. Occasionally, another previously grouped speaker (before the 6:00 ungrouping) will end up in the group.

I ran some repeated tests and was sometimes able to replicate the issue I was seeing. Looking at the homebridge logs, I saw the following:

0|homebrid | [2018-8-2 19:12:17] [ZP] Bathroom Sonos: power (group membership) changed from true to false
0|homebrid | [2018-8-2 19:12:17] [ZP] Kitchen Sonos: platform coordinator
0|homebrid | [2018-8-2 19:12:17] [ZP] Kitchen Sonos: power (group membership) changed from true to false
0|homebrid | [2018-8-2 19:12:25] [ZP] Kitchen Sonos: coordinator for group Kitchen
0|homebrid | [2018-8-2 19:12:30] [ZP] Bathroom Sonos: platform coordinator
0|homebrid | [2018-8-2 19:12:30] [ZP] Bathroom Sonos: coordinator for group Bathroom
...
...
...
0|homebrid | [2018-8-2 19:12:52] [ZP] Kitchen Sonos: coordinator for group Kitchen
0|homebrid | [2018-8-2 19:16:38] [ZP] Bathroom Sonos: power (group membership) changed from true to false

In this example, I manually performed the "Ungroup all" scene twice. Once at 19:12:17 and again at 19:16:38.
I repeated the scene here because I noticed that the Bathroom speaker still had the power state true while all the rest of the speakers were false, after performing the scene. The Bathroom should have been false, as reported in the logs at 19:12:17, but it was not. There is no mention of the speaker power state changing back to true between the two Bathroom Sonos: power (group membership) changed from true to false logs.

I believe this odd behaviour where the power was state was not remaining false is why I was seeing additional speakers in my scene created groups.

TypeError: Cannot read property '0' of undefined

I updated to the latest version but now getting this error which crashes Homebridge...any ideas?

TypeError: Cannot read property '0' of undefined
at ZPAccessory. (/usr/local/lib/node_modules/homebridge-zp/lib/ZPAccessory.js:294:62)
at Parser. (/usr/local/lib/node_modules/homebridge-zp/node_modules/xml2js/lib/parser.js:303:18)
at emitOne (events.js:116:13)
at Parser.emit (events.js:211:7)
at SAXParser.onclosetag (/usr/local/lib/node_modules/homebridge-zp/node_modules/xml2js/lib/parser.js:261:26)
at emit (/usr/local/lib/node_modules/homebridge-zp/node_modules/sax/lib/sax.js:624:35)
at emitNode (/usr/local/lib/node_modules/homebridge-zp/node_modules/sax/lib/sax.js:629:5)
at closeTag (/usr/local/lib/node_modules/homebridge-zp/node_modules/sax/lib/sax.js:889:7)
at SAXParser.write (/usr/local/lib/node_modules/homebridge-zp/node_modules/sax/lib/sax.js:1436:13)
at Parser.exports.Parser.Parser.parseString (/usr/local/lib/node_modules/homebridge-zp/node_modules/xml2js/lib/parser.js:322:31)

Unknown Track Metadata

Hi Erik,

Just noticed an error popping up in my Homebridge logs over the past few days regarding unknown track metadata. Doesn't seem to be causing any issues, but might be worth a look when you get a sec - relevant console log lines below:

[2018-8-28 10:47:34] [ZP] Initializing ZP platform...
[2018-8-28 10:47:34] [ZP] homebridge-zp v0.2.31, node v9.11.2, homebridge v0.4.44
[2018-8-28 10:47:34] [ZP] warning: not using recommended node version v8.11.4 LTS
[2018-8-28 10:48:04] [ZP] Initializing platform accessory 'Bedroom Sonos'...
[2018-8-28 10:48:05] [ZP] Bedroom Sonos: coordinator for group Bedroom
[2018-8-28 10:48:05] [ZP] Bedroom Sonos: unknown track metadata {"$":{"id":"-1","parentID":"-1","restricted":"true"},"res":[{"_":"x-sonos-http:librarytrack%3ai.xYB7oi8YEdP.mp4?sid=204&flags=73760&sn=1","$":{"protocolInfo":"sonos.com-http:*:audio/mp4:*","duration":"0:03:14"}}],"r:streamContent":[""],"r:radioShowMd":[""],"upnp:albumArtURI":["/getaa?s=1&u=x-sonos-http%3alibrarytrack%253ai.xYB7oi8YEdP.mp4%3fsid%3d204%26flags%3d73760%26sn%3d1"],"dc:title":["Make Me Feel"],"upnp:class":["object.item.audioItem.musicTrack"],"dc:creator":["Janelle Monáe"],"upnp:album":["Dirty Computer"],"r:tags":["1"]}
[2018-8-28 10:48:05] [ZP] Bedroom Sonos: set power (play/pause) from undefined to false
[2018-8-28 10:48:05] [ZP] Bedroom Sonos: set current track from undefined to "Make Me Feel"
[2018-8-28 10:48:05] [ZP] Bedroom Sonos: set group volume from undefined to 9
[2018-8-28 10:48:05] [ZP] Bedroom Sonos: set group mute from undefined to false

Alex

Independent volume control while in Group

Hello Erik. First of all thanks for developing this very useful plugin.
Secondly, I cannot seem to find a solution to configure it the way I want it to work. I will describe my setup in detail below.

My setup is comprised of 4 Sonos Play1 speakers and 4 Philips Motion Sensors. I created automation rules inside Apple home app and using the Hue Room lights for triggers: the sensors trigger the lights and the lights trigger the speakers. When the lights turn off, the volume of the speaker is set to 0. I use this approach of turning the volume to 15% for on and to 0% for off to get rid of the delay existing when using the on/off (play/pause) speaker setup. Most of the time all the speakers use the same radio station.
The problem I am facing is that by controlling each zone independently, the speakers audio source is not synchronised. If i use sonos groups i cannot control the volume of each zone independently from the automation. It works if I do it manually on each speaker but when I try to automate it or control the volume of the individual speaker from Home app it affects the group volume, even if I only modify the speaker volume and not the group.

The scenario that would work is: all 4 sonos speakers in one group; automations control individual speaker (zone) volume.
I tried setting this up but modifying one speaker/zone volume affects the whole group volume. Setting one zone to 0 sets all the speakers in the group to 0 even if the Home App show a different volume for the Group/Speakers accessory.

Is this desired scenario possible? Am I missing something?

This is the config I use now but stoped using the Speakers accessory for automations because of the behaviour described above.

"platforms": [
{
"platform": "ZP",
"name": "ZP",
"service": "speaker",
"brightness": true,
"speakers": true
}
]

Many thanks!

Running with openvpn

Hey great plugin. Works as it should.

Only problem i am running into: I have an vpn connection to an external vpn with my raspberry pi running. when the vpn connection is enabled then homebridge does not discover any sonos players. when i disable it then it discovers the players and it still works when i reconnect to the vpn server. i tried binding homebridge-zp to the local iop but it did not help. i also added ip routes but still not working. binding and passing the port through iptables did also not help.

any ideas?!

Repo Name

Your plugin is far better than homebridge-sonos...
you might wanna change your repos name to something, that can actually be found. ✌🏻

cheers.

Pre-defined Speaker Grouping

Just a suggestion for making life easier for those of us who repeatedly group the same speakers together on a daily basis.

I propose the implementation of a configuration where groups containing multiple speakers could be defined, and expose a Homekit switch accessory for each of these groups. When turned on, the defined speakers in that accessories 'group' would be grouped together in a Sonos group.

When turned off, the defined speakers would be removed from the Sonos group.

I understand there are considerations to be made for existing groups when 'turning on' the Sonos group, and how this should be handled. I for one, would be perfectly happy to have all the speakers in the defined group, leave any current groups they are in when the switch is turned on, and group together into the pre-defined group. When turning off, If other speakers outside of the defined list of speakers have been added to the group, these could either also be ungrouped, or if you wanted to get fancy, a new group could be created which contains only the speakers outside of the defined list of speakers in the group you that has just been turned off (although I think this might be overkill).

The idea for this has come from playing with the web application speakerscenes.com, where pre-defined groups of speakers, aka 'scenes' can be triggered. This implementation uses the Sonos web API. Having a similar control in Homekit would be very useful in my option.

What are your thoughts on this?

Recovering from power failure

I managed to trigger my earth leakage circuit breaker today, while installing a mutilated Xiaomi wired in-wall switch into my ceiling fan. This cut off power from all my zoneplayers, my macMini server, my network router, switches and access points. The Raspberry Pi running homebridge (and deCONZ) survived, because it is backed by a USB power bank that supports pass-through charging.

However, recovery after I restored the power wasn't as smooth as I'd hoped:

  • It seems the Bonjour advertisement of homebridge is lost, even though homebridge continues running. I don't know if and, if so, how often homebridge refreshes the advertisement, but I had to restart homebridge to get my HomeKit clients to find the homebridge server again. Workaround is easy enough: restart homebridge from the power_back script;
  • The subscriptions for notifications that homebridge-zp makes with each zoneplayer are lost when the zoneplayer reboots. homebridge-zp will renew these after at most subscriptionTimeout minutes (30 by default), but it would be better to detect that a zoneplayer has started and renew immediately. For a power failure, a restart of homebridge from the power_back script would be enough, but that wouldn't help when power cycling a zoneplayer.
  • The zoneplayers seem to reboot pretty quickly, at least before my Internet connection is up. Somehow, they won't play TuneIn radio stations, (I assume) because they cannot resolve the hostnames. It takes another power cycle of the zoneplayer to remedy that (the bastards at Sonos seem to have removed the support pages where you could initiate a reboot remotely). Incidentally, I see the same issue with my Gigaset Internet telephony server, that won't register with the SIP server.

Error when queue is empty

To start with, thanks for a great plugin.
When my Sonos queues are empty I have noticed the following error in the log:

"...Error: HTTP response code 500 for "urn:schemas-upnp-org:service:AVTransport:1#Play..."
(in apple Home App - No Response)

If I add some music to the queues with another ZP, there's no error and I can start/stop and change volume

Homebridge music level not the same as in the Sonos app

Hello, I noticed something today. When I set the level for all my speakers (which are grouped) to the same level, they are not actually the same level.

When I set my speakers to 17% in the Home app:
HomeKit screenshot

The level is not equal in the Sonos app:
Sonos app screenshot

Any ideas?

EDIT: If I then fix the level so they're all the same in the Sonos app, they are the same in the Home app. But if I then touch them in the Home app again, it offsets.

sonos zp not found after switched off/on

I like this stable homebridge plug-in.
If I move a sonos from one room to an other room it will not be found till homebridge is restarted.
So if the power of a sonos player is interupted you have to restart homebridge.

Is there not a way that the plug-in can find them after the sonos play is powered on?

bad wifi connection - constantly new accessory

Hello @ebaauw,

i have a little problem with homebridge-zp. I have two Sonos Play:1 speakers, one in the living room and one in the bathroom. The bathroom has often times disconnects, due to weak Wi-Fi. 👎

{
"platform": "ZP",
 "service": "switch",
 "brightness": true,
 "speakers": true
},

I think, always, if the WLAN causes problems, HomeKit always get two new characteristics for the bathroom (Sonos + Multiroom) - the old characteristics are deleted. Room assignments are lost, settings in favorites and status also.

Can the problem be solved? So, Sonos Play: 1 in the bathroom is not always recognized as a new speaker?

Cheers 👋
Nico

No service in Home-app

Looks like the Homebridge-zp is reconized but gives me the following feedback (in Dutch):

"
Niet geschikt
Dit accessoire wordt momenteel niet ondersteund door de Woning-app
"

Is there anything I can do to fix this?

siri commands

Hello i just installed the homebridge-zp with this config

{
"platform": "ZP",
"name": "ZP",
"service": "speaker",
"brightness": true,
"speakers": true
}

When it installs, i see it finds all my speakers and groups.

Question 1:
But when i am in my dutch homekit-app "woning" (basic app from apple), there is presented a button called "Playbar TV sonos", but i cannot click on it. It then says it is not supported.

Question 2: How can or should i call it from within siri. I tried the dutch sentences"zet the sonos aan", "zet speaker aan", "zet playbar tv aan" etc.

But nothing happens.

What do i do wrong?

Sonos devices not getting recognized

Hi, I've followed the installation instructions for Homebridge and this plugin and can't get my Sonos devices to show up as I was hoping they would.

Here's my config.json ... anything stand out that I should fix?

{
    "bridge": {
        "name": "Homebridge",
        "username": "xx:xx:xx:xx:xx:xx",
        "port": xxxxx,
        "pin": "xx-xx-xxx"
    },
    
    "platforms": [
        {
            "platform": "ZP",
            "service": "speaker",
            "brightness": true,
            "speakers": true
        }
    ]
}

iOS 11.4 Speaker Service?

@ebaauw
I know this has been discussed before, but I’m wondering if anything has changed under iOS 11.4

Has anyone managed to get the Speaker Service working in the native Home app?
In the past people reported the Home app tiles showing as Unsupported if Service.Speaker HomeKit Accessory Type was used. Do they show up as Speakers under iOS 11.4?

Many thanks for your continued support of this plugin 😀

added speaker get removed from scenes after time

I'm quite not sure why this happens (maybe some id changes or so?) but my speakers get removed from time to time from my homekit-scenes (leave home, etc.)

Am I the only one with this behaviour?

Unsubscribe from ZonePlayer events on exit

Currently, homebridge-zp creates subscriptions with each ZonePlayer to receive events. These subscriptions are created with a 30 minute timeout, and refreshed automatically. When homebridge exits, the subscription remains active, until timed out, consuming resources on the ZonePlayer (typically each ZonePlayer only allows 32 subscriptions per event type). When frequently restarting homebridge (during testing), I managed to reach this limit.

We would need a hook in homebridge to be notified of a pending exit. Afaik, homebridge doesn't provide such hook.

Enable / Disable Status Light on Sonos

It would be great if we could get control of the status light on the top of the Sonos. I have one in my bedroom and would love to automate the disable of that light when going to sleep!

Use homebridge v2.0 dynamic platform accessories

Currently, homebridge-zp uses static platform accessories. Using dynamic accessories would enable homebirdge-zp to act on ZoneGroupTopology events (e.g. creating or breaking a stereo pair) without having to restart homebridge.

current track

HI @ebaauw Is it possible to see the current track in the home kit app? I now have this config file, but do not see anything :)

I can see the current track in the homebridge log file:

[2018-8-12 12:24:50] [ZP] Tv Sonos Sonos: set current track from "ELLIE GOULDING - ARMY" to "ALL THINGS UNDER THE SUN"

  "platform": "ZP",
             "service": "fan",
             "brightness": true,
             "speakers": true,
             "CurrentTrack": true

homebridge-zp crashes Homebridge

Ever since installing these last couple of updates, I'm unable to get Homebridge to work with homebridge-zp configured. I'm on the recommended node version, v8.9.4.

Here's the error message I get, which appears to pertain to alarms:

TypeError: alarmClock.CurrentAlarmList is not iterable
at ZPPlatform. (/usr/local/lib/node_modules/homebridge-zp/lib/ZPPlatform.js:365:54)
at self._parseKey (/usr/local/lib/node_modules/homebridge-zp/node_modules/sonos/lib/services/AlarmClock.js:81:14)
at parseString (/usr/local/lib/node_modules/homebridge-zp/node_modules/sonos/lib/services/Service.js:108:12)
at Parser. (/usr/local/lib/node_modules/homebridge-zp/node_modules/xml2js/lib/parser.js:303:18)
at emitOne (events.js:116:13)
at Parser.emit (events.js:211:7)
at SAXParser.onclosetag (/usr/local/lib/node_modules/homebridge-zp/node_modules/xml2js/lib/parser.js:261:26)
at emit (/usr/local/lib/node_modules/homebridge-zp/node_modules/sax/lib/sax.js:624:35)
at emitNode (/usr/local/lib/node_modules/homebridge-zp/node_modules/sax/lib/sax.js:629:5)
at closeTag (/usr/local/lib/node_modules/homebridge-zp/node_modules/sax/lib/sax.js:889:7)

Is this a code bug or possibly something in my setup causing the issue? Thanks in advance!

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.