@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -21,11 +22,14 @@ (define-module (gnu packages zwave)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix git-download)
#:use-module (guix build-system gnu)
+ #:use-module (guix build-system node)
#:use-module (gnu packages)
#:use-module (gnu packages base)
+ #:use-module (gnu packages node-xyz)
#:use-module (gnu packages libusb)
#:use-module (gnu packages linux)
#:use-module (gnu packages perl)
+ #:use-module (gnu packages python)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages xml))
@@ -88,3 +92,68 @@ (define-public open-zwave
and respond to devices on a Z-Wave network, without requiring in-depth
knowledge of the Z-Wave protocol.")
(license license:lgpl3+)))
+
+(define-public node-openzwave-shared
+ (package
+ (name "node-openzwave-shared")
+ (version "1.7.2")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/OpenZWave/node-openzwave-shared")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1bqqy12dzqj05j9wsh50dmn84dddmhz0gjzvd3y20z4hpy1v8rsc"))))
+ (inputs
+ `(("open-zwave" ,open-zwave)
+ ("node-nan" ,node-nan)))
+ (native-inputs
+ `(("which" ,which)
+ ("python" ,python)
+ ("pkg-config" ,pkg-config)))
+ (build-system node-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'build
+ ;; For some reason, `npm install` doesn't build
+ ;; the addon automatically, so we do it explicitly here.
+ ;; We go through `npx` so the npmrc file sets the
+ ;; configuration up properly.
+ (lambda* (#:key inputs #:allow-other-keys)
+ (define node-dir
+ (assoc-ref inputs "node"))
+ (invoke (string-append node-dir "/bin/npx")
+ "--call"
+ (string-append
+ node-dir
+ "/lib/node_modules/npm/bin/node-gyp-bin/node-gyp"
+ " "
+ "rebuild")))))))
+ (home-page "https://github.com/OpenZWave/node-openzwave-shared")
+ (synopsis "Node.js bindings for OpenZWave")
+ (description
+ "With the @code{node-openzwave-shared} package, you can easily control
+and manage your Z-Wave devices (lights, dimmers, blinds, you name it) from
+within Node.js applications. This library also supports secure
+devices (e.g. door locks) that require encryption. All widely used Node.js
+versions are supported with the help of @code{node-nan}.
+
+This library is currently able to:
+@itemize @bullet
+@item
+scan a Z-Wave network and report on connected devices;
+@item
+write values to Z-Wave nodes;
+@item
+monitor the network for changes;
+@item
+heal nodes and/or the network; and
+@item
+perform management tasks: add or remove nodes, replace failed nodes,
+manage their group associations, etc.
+@end itemize")
+ (license license:isc)))