[plugin] GPIO control: control GPIO with Volumio 3 events (now RPi5 compatible!)

Hi.
i have exactly the same issue that folks had when this topic was started.
I was expecting that when Play is started- GPIO will be on, but on other event (on Stop for example) - the same GPIO will be off.
But in reality- every event is processed once and when GPIO is ON- it will be ON until restart or plugin deactivation.

Is it possible to have only one GPIO for Play, Pause, Stop events to be active at a time?

it is definitely possible. please look at this example for GPIO26

Sure. With one GPIO it is possible.

But I have 3 LEDs and looking for an option to lit one of them depending on playback mode - Play, Pause, Stop

OK I got your problem, I donā€™t think it is possible with the current plugin

Seems there are some issues with GPIO and Buster. Same goes for GPIO_Buttons. Unable (besides GPIO26) to make it work on GPIOā€™s that are default Low. the ports that are default High, with added pullup resistor, do work.

example for GPIO4:
image

Darmur, may be you know any alternative?

Unfortunately no, with the plugin as-it-is itā€™s not possible to achieve what you want.

Maybe with an updated plugin, including more GPIOs for the same action, you will be able to do so, but itā€™s up to the author of the plugin itself if to release a new version

Are you sure you are reading the right pins to correspond with the gpioā€™s.
IMO the whole naming thing is confusing, actual pin vs name vs BCM vs wPi

SSH into the pi and do a gpio readall it will do a print out, showing the header and their state.
Then all you need to do is work out which one the author of the plugin used in the settings.

The rotary encoder II and GPIOButtons plugins settings seem to correspond with the BCM column

This is Volumio 3.173 default state ie no external pull-up, pulldown added.

GPIO default

If you are using a Pi4 and get a cant read board error you need to upate wiringPi

cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

yes i did. Did upgrade wiringPI. I am able to read the pins with Python. It will flag the used pins. However none of the three GPIO plugins seems to be able to deal with GPIO that are default LOW.

Compared 3 rPiā€™s 4 all with the same result.

1 Like

Strange, as the default high pins are the only ones I am using. pin5 with GPIO Buttons for shut down.
pin10,24,26 with rotary encoder II.
Not using any added pullup either just a 1k resistor inline and a 60nf cap switch side between signal and ground.This works fine with rotary encoder II.

Although with GPIObuttons pin5 doesnt like the inline resistor just doesnt work with it, so now its just a momentary switch between pin5 and ground. Maybe this is your problem too

Iā€™m in the middle of turning a new external volume control which I plan on adding extra buttons to (next,back), Plan on using pins 29 and 31, I supose Iā€™ll find out soon enough how they like to be wired.

Tried both with and without resistors, but couldnā€™t get it work on GPIO23,24,24,19,20. The event to set them 0 or 1 just didnā€™t work. Next I moved the push button to GPIO 4,5,6 and it worked instantly.

You said that youre have problems with the default high pins, but then you say GPIO 4,5,6 work fine. They are default high.

Sorry, default LOW. It;s getting confusing hehe

Ive not tested yet but maybe the part of the software that sets the logic state is not working in buster.
So you are not relying on the software to set the state. For the default low pins have you tried having the switch between 3.3v and the GPIO obviously through a 1k resistor.
So a default low pin is pulled high when the button is pressed. This shoould still register a change of state.

Not with Wiringpi. Scanned a lot with gpio readall, but no registration (change) in V.
Even wrote a small script to cintniously reading the GPIO, no change of state.

Strange enough, using pyhton on GPIO23,24,25 it did work. As bash script using GPIO it didnā€™t
So this is working:

from gpiozero import Button
import os

Button.was_held = False
# Add GPIO (4,17,27,22,5,6,13,19,26,18,23,24,25,12,16,20,21) to monitor
GPIO_23 = Button(23)
GPIO_24 = Button(24)
GPIO_25 = Button(25)
	
def pressed(btn):
	print (str(btn.pin) + "  button was pressed")
	
def held(btn):
	btn.was_held = True
	
	action_held(btn)

def action_held(btn):
	print(str(btn.pin) + " button was held not just pressed, execute held")
	
def released(btn):
	if not btn.was_held:
		print(str(btn.pin) + " button was released")
	btn.was_held = False
	
def check_button(btn):
	btn.when_pressed = pressed
	btn.when_held = held
	btn.when_released = released

while True:
	# Set action for defined GPIO's (4,17,27,22,5,6,13,19,26,18,23,24,25,12,16,20,21)
	check_button(GPIO_23)
	check_button(GPIO_24)
	check_button(GPIO_25)

This itā€™s not registering any keypress, (did gpio export for some pins)

#!/bin/bash
while :
do
	combstrprev=""

	for i in {0..40}
	do
		combstr+="$(sudo gpio read $i 2>&1)"
		if (i==0)
		then	
			combstrprev=combstr
		fi
		if !((combstr == combstrprev))
		then 
			echo "GPIO$i changed" 
		fi
		combstrprev=${combstr:1:$i}
	done
	echo -e $combstr
	sleep 0.1
	combstr=""
done

Youā€™ve lost me with python.
Personally Id be testing with wiringPi and the plugin I need to get working.
Iā€™ll be trying soon enough though, as soon as the volume control comes off the lathe and gets wired up.

until then

Maybe the onoff library needs to be updated as someone also said that the GPIO-buttons plugin doesnā€™t work either (which uses the same library). Iā€™m not sure what the issue could be :pleading_face:. From my testing I only used GPIOs that were default low.

Hi, I have installed it on Volumio 3 and it refuse to start :sob: .
I was so happy to find this plugin to switch off my cheap touch screen when nothing is played.

journalctl -f (click here to expanse)
Jan 28 13:41:32 volumio volumio[741]: info: Enabling plugin gpio_control
Jan 28 13:41:32 volumio volumio[741]: info: Loading plugin "gpio_control"...
Jan 28 13:41:32 volumio volumio[741]: error: !!!! WARNING !!!!
Jan 28 13:41:32 volumio volumio[741]: error: The plugin system_controller/gpio_control failed to load, setting it to stopped. Error: Error: Cannot find module 'onoff'
Jan 28 13:41:32 volumio volumio[741]: Require stack:
Jan 28 13:41:32 volumio volumio[741]: - /data/plugins/system_controller/gpio_control/index.js
Jan 28 13:41:32 volumio volumio[741]: - /volumio/app/pluginmanager.js
Jan 28 13:41:32 volumio volumio[741]: - /volumio/app/index.js
Jan 28 13:41:32 volumio volumio[741]: - /volumio/index.js
Jan 28 13:41:32 volumio volumio[741]: error: Stack trace: Error: Cannot find module 'onoff'
Jan 28 13:41:32 volumio volumio[741]: Require stack:
Jan 28 13:41:32 volumio volumio[741]: - /data/plugins/system_controller/gpio_control/index.js
Jan 28 13:41:32 volumio volumio[741]: - /volumio/app/pluginmanager.js
Jan 28 13:41:32 volumio volumio[741]: - /volumio/app/index.js
Jan 28 13:41:32 volumio volumio[741]: - /volumio/index.js
Jan 28 13:41:32 volumio volumio[741]:     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
Jan 28 13:41:32 volumio volumio[741]:     at Function.Module._load (internal/modules/cjs/loader.js:725:27)
Jan 28 13:41:32 volumio volumio[741]:     at Module.require (internal/modules/cjs/loader.js:952:19)
Jan 28 13:41:32 volumio volumio[741]:     at require (internal/modules/cjs/helpers.js:88:18)
Jan 28 13:41:32 volumio volumio[741]:     at Object.<anonymous> (/data/plugins/system_controller/gpio_control/index.js:6:12)
Jan 28 13:41:32 volumio volumio[741]:     at Module._compile (internal/modules/cjs/loader.js:1063:30)
Jan 28 13:41:32 volumio volumio[741]:     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
Jan 28 13:41:32 volumio volumio[741]:     at Module.load (internal/modules/cjs/loader.js:928:32)
Jan 28 13:41:32 volumio volumio[741]:     at Function.Module._load (internal/modules/cjs/loader.js:769:14)
Jan 28 13:41:32 volumio volumio[741]:     at Module.require (internal/modules/cjs/loader.js:952:19)
Jan 28 13:41:32 volumio volumio[741]:     at require (internal/modules/cjs/helpers.js:88:18)
Jan 28 13:41:32 volumio volumio[741]:     at PluginManager.loadCorePlugin (/volumio/app/pluginmanager.js:235:29)
Jan 28 13:41:32 volumio volumio[741]:     at Promise._successFn (/volumio/app/pluginmanager.js:1837:19)
Jan 28 13:41:32 volumio volumio[741]:     at nextTickCallback (/volumio/node_modules/kew/kew.js:47:28)
Jan 28 13:41:32 volumio volumio[741]:     at processTicksAndRejections (internal/process/task_queues.js:75:11)
Jan 28 13:41:32 volumio volumio[741]: error: !!!! WARNING !!!!
Jan 28 13:41:32 volumio volumio[741]: info: Done.

Is there an update expected ? :frowning_face_with_open_mouth:
Do I create an issue to request updates?

Assuming the plugin is still installed in ā€œ/data/plugins/system_controller/gpio_controlā€ try to run

sudo apt-get update
sudo apt-get -y install build-essential
npm install --prefix "/data/plugins/system_controller/gpio_control" onoff@^1.1.1

Thank you,
It fails :

Command Result
volumio@volumio:~$ sudo apt-get update
Get:1 http://raspbian.raspberrypi.org/raspbian buster InRelease [15.0 kB]
Get:2 http://archive.raspberrypi.org/debian buster InRelease [32.6 kB]
Hit:3 https://deb.nodesource.com/node_14.x buster InRelease
Get:4 http://archive.raspberrypi.org/debian buster/main armhf Packages [393 kB]
Fetched 441 kB in 1s (313 kB/s)
Reading package lists... Done
volumio@volumio:~$ sudo apt-get -y install build-essential
Reading package lists... Done
Building dependency tree
Reading state information... Done
build-essential is already the newest version (12.6).
0 upgraded, 0 newly installed, 0 to remove and 14 not upgraded.
volumio@volumio:~$ npm install --prefix "/data/plugins/system_controller/gpio_control" onoff@^1.1.1

> epoll@1.0.2 install /data/plugins/system_controller/gpio_control/node_modules/epoll
> node-gyp rebuild

make: Entering directory '/data/plugins/system_controller/gpio_control/node_modules/epoll/build'
  CXX(target) Release/obj.target/epoll/src/epoll.o
In file included from ../../nan/nan_converters.h:67,
                 from ../../nan/nan.h:202,
                 from ../src/epoll.cc:15:
../../nan/nan_converters_43_inl.h: In static member function 'static Nan::imp::ToFactoryBase<v8::Boolean>::return_t Nan::imp::ToFactory<v8::Boolean>::convert(v8::Local<v8::Value>)':
../../nan/nan_converters_43_inl.h:18:69: error: no matching function for call to 'v8::Value::ToBoolean(v8::Local<v8::Context>)'
       val->To ## TYPE(v8::Isolate::GetCurrent()->GetCurrentContext())          \
                                                                     ^
../../nan/nan_converters_43_inl.h:22:1: note: in expansion of macro 'X'
 X(Boolean)
 ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2848:18: note: candidate: 'v8::Local<v8::Boolean> v8::Value::ToBoolean(v8::Isolate*) const'
   Local<Boolean> ToBoolean(Isolate* isolate) const;
                  ^~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2848:18: note:   no known conversion for argument 1 from 'v8::Local<v8::Context>' to 'v8::Isolate*'
In file included from ../../nan/nan_converters.h:67,
                 from ../../nan/nan.h:202,
                 from ../src/epoll.cc:15:
../../nan/nan_converters_43_inl.h: In static member function 'static Nan::imp::ValueFactoryBase<bool>::return_t Nan::imp::ToFactory<bool>::convert(v8::Local<v8::Value>)':
../../nan/nan_converters_43_inl.h:37:57: error: no matching function for call to 'v8::Value::BooleanValue(v8::Local<v8::Context>)'
   return val->NAME ## Value(isolate->GetCurrentContext());                     \
                                                         ^
../../nan/nan_converters_43_inl.h:40:1: note: in expansion of macro 'X'
 X(bool, Boolean)
 ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2858:8: note: candidate: 'bool v8::Value::BooleanValue(v8::Isolate*) const'
   bool BooleanValue(Isolate* isolate) const;
        ^~~~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2858:8: note:   no known conversion for argument 1 from 'v8::Local<v8::Context>' to 'v8::Isolate*'
In file included from ../../nan/nan_new.h:189,
                 from ../../nan/nan.h:203,
                 from ../src/epoll.cc:15:
../../nan/nan_implementation_12_inl.h: In static member function 'static Nan::imp::FactoryBase<v8::Function>::return_t Nan::imp::Factory<v8::Function>::New(Nan::FunctionCallback, v8::Local<v8::Value>)':
../../nan/nan_implementation_12_inl.h:105:32: error: no matching function for call to 'v8::Function::New(v8::Isolate*&, void (&)(const v8::FunctionCallbackInfo<v8::Value>&), v8::Local<v8::Object>&)'
                           , obj));
                                ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:4445:31: note: candidate: 'static v8::MaybeLocal<v8::Function> v8::Function::New(v8::Local<v8::Context>, v8::FunctionCallback, v8::Local<v8::Value>, int, v8::ConstructorBehavior, v8::SideEffectType)'
   static MaybeLocal<Function> New(
                               ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:4445:31: note:   no known conversion for argument 1 from 'v8::Isolate*' to 'v8::Local<v8::Context>'
In file included from ../../nan/nan_new.h:189,
                 from ../../nan/nan.h:203,
                 from ../src/epoll.cc:15:
../../nan/nan_implementation_12_inl.h: In static member function 'static Nan::imp::FactoryBase<v8::StringObject>::return_t Nan::imp::Factory<v8::StringObject>::New(v8::Local<v8::String>)':
../../nan/nan_implementation_12_inl.h:337:37: error: no matching function for call to 'v8::StringObject::New(v8::Local<v8::String>&)'
   return v8::StringObject::New(value).As<v8::StringObject>();
                                     ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:5854:23: note: candidate: 'static v8::Local<v8::Value> v8::StringObject::New(v8::Isolate*, v8::Local<v8::String>)'
   static Local<Value> New(Isolate* isolate, Local<String> value);
                       ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:5854:23: note:   candidate expects 2 arguments, 1 provided
In file included from ../../nan/nan_new.h:189,
                 from ../../nan/nan.h:203,
                 from ../src/epoll.cc:15:
../../nan/nan_implementation_12_inl.h:337:58: error: expected primary-expression before '>' token
   return v8::StringObject::New(value).As<v8::StringObject>();
                                                          ^
../../nan/nan_implementation_12_inl.h:337:60: error: expected primary-expression before ')' token
   return v8::StringObject::New(value).As<v8::StringObject>();
                                                            ^
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In function 'v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)':
../../nan/nan.h:840:60: warning: 'v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)' is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, func, argc, argv);
                                                            ^
In file included from ../src/epoll.cc:12:
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:191:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:108:42: note: in definition of macro 'NODE_DEPRECATED'
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h:840:60: warning: 'v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)' is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, func, argc, argv);
                                                            ^
In file included from ../src/epoll.cc:12:
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:191:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:108:42: note: in definition of macro 'NODE_DEPRECATED'
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In function 'v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)':
../../nan/nan.h:855:62: warning: 'v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)' is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, symbol, argc, argv);
                                                              ^
In file included from ../src/epoll.cc:12:
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:184:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:108:42: note: in definition of macro 'NODE_DEPRECATED'
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h:855:62: warning: 'v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)' is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, symbol, argc, argv);
                                                              ^
In file included from ../src/epoll.cc:12:
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:184:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:108:42: note: in definition of macro 'NODE_DEPRECATED'
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In function 'v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)':
../../nan/nan.h:870:62: warning: 'v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)' is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, method, argc, argv);
                                                              ^
In file included from ../src/epoll.cc:12:
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:177:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:108:42: note: in definition of macro 'NODE_DEPRECATED'
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h:870:62: warning: 'v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)' is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, method, argc, argv);
                                                              ^
In file included from ../src/epoll.cc:12:
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:177:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:108:42: note: in definition of macro 'NODE_DEPRECATED'
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In constructor 'Nan::Utf8String::Utf8String(v8::Local<v8::Value>)':
../../nan/nan.h:916:53: error: no matching function for call to 'v8::Value::ToString()'
       v8::Local<v8::String> string = from->ToString();
                                                     ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2810:44: note: candidate: 'v8::MaybeLocal<v8::String> v8::Value::ToString(v8::Local<v8::Context>) const'
   V8_WARN_UNUSED_RESULT MaybeLocal<String> ToString(
                                            ^~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2810:44: note:   candidate expects 1 argument, 0 provided
In file included from ../src/epoll.cc:15:
../../nan/nan.h:926:74: error: no matching function for call to 'v8::String::WriteUtf8(char*&, int, int, const int&)'
         length_ = string->WriteUtf8(str_, static_cast<int>(len), 0, flags);
                                                                          ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3037:7: note: candidate: 'int v8::String::WriteUtf8(v8::Isolate*, char*, int, int*, int) const'
   int WriteUtf8(Isolate* isolate, char* buffer, int length = -1,
       ^~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3037:7: note:   no known conversion for argument 1 from 'char*' to 'v8::Isolate*'
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In member function 'v8::Local<v8::Value> Nan::Callback::Call_(v8::Isolate*, v8::Local<v8::Object>, int, v8::Local<v8::Value>*) const':
../../nan/nan.h:1484:5: warning: 'v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)' is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
     ));
     ^
In file included from ../src/epoll.cc:12:
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:191:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:108:42: note: in definition of macro 'NODE_DEPRECATED'
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h:1484:5: warning: 'v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)' is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
     ));
     ^
In file included from ../src/epoll.cc:12:
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:191:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:108:42: note: in definition of macro 'NODE_DEPRECATED'
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In member function 'void Nan::AsyncWorker::SaveToPersistent(const char*, const v8::Local<v8::Value>&)':
../../nan/nan.h:1538:64: error: no matching function for call to 'v8::Object::Set(v8::Local<v8::String>, const v8::Local<v8::Value>&)'
     New(persistentHandle)->Set(New(key).ToLocalChecked(), value);
                                                                ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3670:37: note: candidate: 'v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)'
   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
                                     ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3670:37: note:   candidate expects 3 arguments, 2 provided
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3673:37: note: candidate: 'v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)'
   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
                                     ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3673:37: note:   candidate expects 3 arguments, 2 provided
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In member function 'void Nan::AsyncWorker::SaveToPersistent(const v8::Local<v8::String>&, const v8::Local<v8::Value>&)':
../../nan/nan.h:1544:42: error: no matching function for call to 'v8::Object::Set(const v8::Local<v8::String>&, const v8::Local<v8::Value>&)'
     New(persistentHandle)->Set(key, value);
                                          ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3670:37: note: candidate: 'v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)'
   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
                                     ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3670:37: note:   candidate expects 3 arguments, 2 provided
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3673:37: note: candidate: 'v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)'
   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
                                     ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3673:37: note:   candidate expects 3 arguments, 2 provided
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In member function 'void Nan::AsyncWorker::SaveToPersistent(uint32_t, const v8::Local<v8::Value>&)':
../../nan/nan.h:1550:44: error: no matching function for call to 'v8::Object::Set(uint32_t&, const v8::Local<v8::Value>&)'
     New(persistentHandle)->Set(index, value);
                                            ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3670:37: note: candidate: 'v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)'
   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
                                     ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3670:37: note:   candidate expects 3 arguments, 2 provided
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3673:37: note: candidate: 'v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)'
   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
                                     ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3673:37: note:   candidate expects 3 arguments, 2 provided
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In member function 'v8::Local<v8::Value> Nan::AsyncWorker::GetFromPersistent(const char*) const':
../../nan/nan.h:1556:61: error: no matching function for call to 'v8::Object::Get(v8::Local<v8::String>)'
         New(persistentHandle)->Get(New(key).ToLocalChecked()));
                                                             ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3717:43: note: candidate: 'v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)'
   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                           ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3717:43: note:   candidate expects 2 arguments, 1 provided
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3720:43: note: candidate: 'v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)'
   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                           ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3720:43: note:   candidate expects 2 arguments, 1 provided
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In member function 'v8::Local<v8::Value> Nan::AsyncWorker::GetFromPersistent(const v8::Local<v8::String>&) const':
../../nan/nan.h:1562:55: error: no matching function for call to 'v8::Object::Get(const v8::Local<v8::String>&)'
     return scope.Escape(New(persistentHandle)->Get(key));
                                                       ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3717:43: note: candidate: 'v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)'
   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                           ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3717:43: note:   candidate expects 2 arguments, 1 provided
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3720:43: note: candidate: 'v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)'
   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                           ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3720:43: note:   candidate expects 2 arguments, 1 provided
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In member function 'v8::Local<v8::Value> Nan::AsyncWorker::GetFromPersistent(uint32_t) const':
../../nan/nan.h:1567:57: error: no matching function for call to 'v8::Object::Get(uint32_t&)'
     return scope.Escape(New(persistentHandle)->Get(index));
                                                         ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3717:43: note: candidate: 'v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)'
   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                           ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3717:43: note:   candidate expects 2 arguments, 1 provided
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3720:43: note: candidate: 'v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)'
   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                           ^~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:3720:43: note:   candidate expects 2 arguments, 1 provided
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In function 'void Nan::AsyncQueueWorker(Nan::AsyncWorker*)':
../../nan/nan.h:1875:62: warning: cast between incompatible function types from 'void (*)(uv_work_t*)' {aka 'void (*)(uv_work_s*)'} to 'uv_after_work_cb' {aka 'void (*)(uv_work_s*, int)'} [-Wcast-function-type]
     , reinterpret_cast<uv_after_work_cb>(AsyncExecuteComplete)
                                                              ^
In file included from /usr/include/c++/8/cassert:44,
                 from /home/volumio/.cache/node-gyp/14.15.4/include/node/node_object_wrap.h:26,
                 from ../src/epoll.cc:13:
../../nan/nan_object_wrap.h: In destructor 'virtual Nan::ObjectWrap::~ObjectWrap()':
../../nan/nan_object_wrap.h:24:25: error: 'class Nan::Persistent<v8::Object>' has no member named 'IsNearDeath'
     assert(persistent().IsNearDeath());
                         ^~~~~~~~~~~
In file included from ../../nan/nan.h:2365,
                 from ../src/epoll.cc:15:
../../nan/nan_object_wrap.h: In member function 'void Nan::ObjectWrap::MakeWeak()':
../../nan/nan_object_wrap.h:67:18: error: 'class Nan::Persistent<v8::Object>' has no member named 'MarkIndependent'
     persistent().MarkIndependent();
                  ^~~~~~~~~~~~~~~
In file included from /usr/include/c++/8/cassert:44,
                 from /home/volumio/.cache/node-gyp/14.15.4/include/node/node_object_wrap.h:26,
                 from ../src/epoll.cc:13:
../../nan/nan_object_wrap.h: In static member function 'static void Nan::ObjectWrap::WeakCallback(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)':
../../nan/nan_object_wrap.h:124:26: error: 'class Nan::Persistent<v8::Object>' has no member named 'IsNearDeath'
     assert(wrap->handle_.IsNearDeath());
                          ^~~~~~~~~~~
../src/epoll.cc: In static member function 'static void Epoll::Init(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE)':
../src/epoll.cc:175:39: error: no matching function for call to 'v8::FunctionTemplate::GetFunction()'
   constructor.Reset(ctor->GetFunction());
                                       ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:6482:46: note: candidate: 'v8::MaybeLocal<v8::Function> v8::FunctionTemplate::GetFunction(v8::Local<v8::Context>)'
   V8_WARN_UNUSED_RESULT MaybeLocal<Function> GetFunction(
                                              ^~~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:6482:46: note:   candidate expects 1 argument, 0 provided
../src/epoll.cc:177:23: error: no matching function for call to 'v8::FunctionTemplate::GetFunction()'
     ctor->GetFunction());
                       ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:6482:46: note: candidate: 'v8::MaybeLocal<v8::Function> v8::FunctionTemplate::GetFunction(v8::Local<v8::Context>)'
   V8_WARN_UNUSED_RESULT MaybeLocal<Function> GetFunction(
                                              ^~~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:6482:46: note:   candidate expects 1 argument, 0 provided
../src/epoll.cc: In static member function 'static Nan::NAN_METHOD_RETURN_TYPE Epoll::Add(Nan::NAN_METHOD_ARGS_TYPE)':
../src/epoll.cc:210:44: error: no matching function for call to 'v8::Value::Int32Value()'
   int err = epoll->Add(info[0]->Int32Value(), info[1]->Int32Value());
                                            ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2869:40: note: candidate: 'v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const'
   V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
                                        ^~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2869:40: note:   candidate expects 1 argument, 0 provided
../src/epoll.cc:210:67: error: no matching function for call to 'v8::Value::Int32Value()'
   int err = epoll->Add(info[0]->Int32Value(), info[1]->Int32Value());
                                                                   ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2869:40: note: candidate: 'v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const'
   V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
                                        ^~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2869:40: note:   candidate expects 1 argument, 0 provided
../src/epoll.cc: In static member function 'static Nan::NAN_METHOD_RETURN_TYPE Epoll::Modify(Nan::NAN_METHOD_ARGS_TYPE)':
../src/epoll.cc:230:47: error: no matching function for call to 'v8::Value::Int32Value()'
   int err = epoll->Modify(info[0]->Int32Value(), info[1]->Int32Value());
                                               ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2869:40: note: candidate: 'v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const'
   V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
                                        ^~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2869:40: note:   candidate expects 1 argument, 0 provided
../src/epoll.cc:230:70: error: no matching function for call to 'v8::Value::Int32Value()'
   int err = epoll->Modify(info[0]->Int32Value(), info[1]->Int32Value());
                                                                      ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2869:40: note: candidate: 'v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const'
   V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
                                        ^~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2869:40: note:   candidate expects 1 argument, 0 provided
../src/epoll.cc: In static member function 'static Nan::NAN_METHOD_RETURN_TYPE Epoll::Remove(Nan::NAN_METHOD_ARGS_TYPE)':
../src/epoll.cc:247:47: error: no matching function for call to 'v8::Value::Int32Value()'
   int err = epoll->Remove(info[0]->Int32Value());
                                               ^
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2869:40: note: candidate: 'v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const'
   V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
                                        ^~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:2869:40: note:   candidate expects 1 argument, 0 provided
In file included from ../src/epoll.cc:12:
../src/epoll.cc: At global scope:
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:758:43: warning: cast between incompatible function types from 'void (*)(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE)' {aka 'void (*)(v8::Local<v8::Object>)'} to 'node::addon_register_func' {aka 'void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)'} [-Wcast-function-type]
       (node::addon_register_func) (regfunc),                          \
                                           ^
/home/volumio/.cache/node-gyp/14.15.4/include/node/node.h:792:3: note: in expansion of macro 'NODE_MODULE_X'
   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
   ^~~~~~~~~~~~~
../src/epoll.cc:381:1: note: in expansion of macro 'NODE_MODULE'
 NODE_MODULE(epoll, Epoll::Init)
 ^~~~~~~~~~~
In file included from ../src/epoll.cc:11:
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h: In instantiation of 'void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = node::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)]':
/home/volumio/.cache/node-gyp/14.15.4/include/node/node_object_wrap.h:85:78:   required from here
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:10874:16: warning: cast between incompatible function types from 'v8::WeakCallbackInfo<node::ObjectWrap>::Callback' {aka 'void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)'} to 'Callback' {aka 'void (*)(const v8::WeakCallbackInfo<void>&)'} [-Wcast-function-type]
                reinterpret_cast<Callback>(callback), type);
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h: In instantiation of 'void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = Nan::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)]':
../../nan/nan_object_wrap.h:66:61:   required from here
/home/volumio/.cache/node-gyp/14.15.4/include/node/v8.h:10874:16: warning: cast between incompatible function types from 'v8::WeakCallbackInfo<Nan::ObjectWrap>::Callback' {aka 'void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)'} to 'Callback' {aka 'void (*)(const v8::WeakCallbackInfo<void>&)'} [-Wcast-function-type]
make: *** [epoll.target.mk:111: Release/obj.target/epoll/src/epoll.o] Error 1
make: Leaving directory '/data/plugins/system_controller/gpio_control/node_modules/epoll/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:315:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)
gyp ERR! System Linux 5.10.90-v7+
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /data/plugins/system_controller/gpio_control/node_modules/epoll
gyp ERR! node -v v14.15.4
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok
npm WARN gpio_control@0.0.1 No repository field.

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! epoll@1.0.2 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the epoll@1.0.2 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/volumio/.npm/_logs/2022-01-28T15_30_47_898Z-debug.log

And

2022-01-28T15_30_47_898Z-debug.log
0 info it worked if it ends with ok
1 verbose cli [
1 verbose cli   '/usr/bin/node',
1 verbose cli   '/usr/bin/npm',
1 verbose cli   'install',
1 verbose cli   '--prefix',
1 verbose cli   '/data/plugins/system_controller/gpio_control',
1 verbose cli   'onoff@^1.1.1'
1 verbose cli ]
2 info using npm@6.14.10
3 info using node@v14.15.4
4 verbose npm-session c834e1ada0a2c31f
5 silly install loadCurrentTree
6 silly install readLocalPackageData
7 http fetch GET 304 https://registry.npmjs.org/onoff 1200ms (from cache)
8 silly pacote range manifest for onoff@^1.1.1 fetched in 1268ms
9 timing stage:loadCurrentTree Completed in 2271ms
10 silly install loadIdealTree
11 silly install cloneCurrentTreeToIdealTree
12 timing stage:loadIdealTree:cloneCurrentTree Completed in 9ms
13 silly install loadShrinkwrap
14 timing stage:loadIdealTree:loadShrinkwrap Completed in 186ms
15 silly install loadAllDepsIntoIdealTree
16 silly resolveWithNewModule onoff@1.2.0 checking installable status
17 http fetch GET 304 https://registry.npmjs.org/epoll 790ms (from cache)
18 silly pacote range manifest for epoll@~1.0.2 fetched in 805ms
19 silly resolveWithNewModule epoll@1.0.2 checking installable status
20 http fetch GET 304 https://registry.npmjs.org/nan 129ms (from cache)
21 silly pacote range manifest for nan@~2.8.0 fetched in 156ms
22 silly resolveWithNewModule nan@2.8.0 checking installable status
23 http fetch GET 304 https://registry.npmjs.org/bindings 187ms (from cache)
24 silly pacote range manifest for bindings@~1.3.0 fetched in 201ms
25 silly resolveWithNewModule bindings@1.3.1 checking installable status
26 timing stage:loadIdealTree:loadAllDepsIntoIdealTree Completed in 1479ms
27 timing stage:loadIdealTree Completed in 1819ms
28 silly currentTree gpio_control@0.0.1
28 silly currentTree +-- after@0.8.2
28 silly currentTree +-- arraybuffer.slice@0.0.6
28 silly currentTree +-- backo2@1.0.2
28 silly currentTree +-- balanced-match@1.0.2
28 silly currentTree +-- base64-arraybuffer@0.1.5
28 silly currentTree +-- better-assert@1.0.2
28 silly currentTree +-- blob@0.0.4
28 silly currentTree +-- brace-expansion@1.1.11
28 silly currentTree +-- callsite@1.0.0
28 silly currentTree +-- child_process@1.0.2
28 silly currentTree +-- component-bind@1.0.0
28 silly currentTree +-- component-emitter@1.2.1
28 silly currentTree +-- component-inherit@0.0.3
28 silly currentTree +-- concat-map@0.0.1
28 silly currentTree +-- debug@2.3.3
28 silly currentTree +-- engine.io-client@1.8.6
28 silly currentTree +-- engine.io-parser@1.3.2
28 silly currentTree +-- fs-extra@0.28.0
28 silly currentTree +-- fs.realpath@1.0.0
28 silly currentTree +-- glob@7.2.0
28 silly currentTree +-- graceful-fs@4.2.9
28 silly currentTree +-- has-binary@0.1.7
28 silly currentTree +-- has-cors@1.1.0
28 silly currentTree +-- imurmurhash@0.1.4
28 silly currentTree +-- indexof@0.0.1
28 silly currentTree +-- inflight@1.0.6
28 silly currentTree +-- inherits@2.0.4
28 silly currentTree +-- isarray@0.0.1
28 silly currentTree +-- json3@3.3.2
28 silly currentTree +-- jsonfile@2.4.0
28 silly currentTree +-- kew@0.7.0
28 silly currentTree +-- klaw@1.3.1
28 silly currentTree +-- minimatch@3.0.4
28 silly currentTree +-- ms@0.7.2
28 silly currentTree +-- multimap@1.0.1
28 silly currentTree +-- object-component@0.0.3
28 silly currentTree +-- once@1.4.0
28 silly currentTree +-- options@0.0.6
28 silly currentTree +-- parsejson@0.0.3
28 silly currentTree +-- parseqs@0.0.5
28 silly currentTree +-- parseuri@0.0.5
28 silly currentTree +-- path-is-absolute@1.0.1
28 silly currentTree +-- rimraf@2.7.1
28 silly currentTree +-- sleep@5.2.4
28 silly currentTree | `-- nan@2.15.0
28 silly currentTree +-- slide@1.1.6
28 silly currentTree +-- socket.io-client@1.7.4
28 silly currentTree +-- socket.io-parser@2.3.1
28 silly currentTree | +-- component-emitter@1.1.2
28 silly currentTree | +-- debug@2.2.0
28 silly currentTree | `-- ms@0.7.1
28 silly currentTree +-- to-array@0.1.4
28 silly currentTree +-- ultron@1.0.2
28 silly currentTree +-- universalify@0.1.2
28 silly currentTree +-- v-conf@1.4.3
28 silly currentTree | +-- fs-extra@3.0.1
28 silly currentTree | `-- jsonfile@3.0.1
28 silly currentTree +-- wrappy@1.0.2
28 silly currentTree +-- write-file-atomic@1.3.1
28 silly currentTree +-- ws@1.1.5
28 silly currentTree +-- wtf-8@1.0.0
28 silly currentTree +-- xmlhttprequest-ssl@1.6.3
28 silly currentTree `-- yeast@0.1.2
29 silly idealTree gpio_control@0.0.1
29 silly idealTree +-- after@0.8.2
29 silly idealTree +-- arraybuffer.slice@0.0.6
29 silly idealTree +-- backo2@1.0.2
29 silly idealTree +-- balanced-match@1.0.2
29 silly idealTree +-- base64-arraybuffer@0.1.5
29 silly idealTree +-- better-assert@1.0.2
29 silly idealTree +-- bindings@1.3.1
29 silly idealTree +-- blob@0.0.4
29 silly idealTree +-- brace-expansion@1.1.11
29 silly idealTree +-- callsite@1.0.0
29 silly idealTree +-- child_process@1.0.2
29 silly idealTree +-- component-bind@1.0.0
29 silly idealTree +-- component-emitter@1.2.1
29 silly idealTree +-- component-inherit@0.0.3
29 silly idealTree +-- concat-map@0.0.1
29 silly idealTree +-- debug@2.3.3
29 silly idealTree +-- engine.io-client@1.8.6
29 silly idealTree +-- engine.io-parser@1.3.2
29 silly idealTree +-- epoll@1.0.2
29 silly idealTree +-- fs-extra@0.28.0
29 silly idealTree +-- fs.realpath@1.0.0
29 silly idealTree +-- glob@7.2.0
29 silly idealTree +-- graceful-fs@4.2.9
29 silly idealTree +-- has-binary@0.1.7
29 silly idealTree +-- has-cors@1.1.0
29 silly idealTree +-- imurmurhash@0.1.4
29 silly idealTree +-- indexof@0.0.1
29 silly idealTree +-- inflight@1.0.6
29 silly idealTree +-- inherits@2.0.4
29 silly idealTree +-- isarray@0.0.1
29 silly idealTree +-- json3@3.3.2
29 silly idealTree +-- jsonfile@2.4.0
29 silly idealTree +-- kew@0.7.0
29 silly idealTree +-- klaw@1.3.1
29 silly idealTree +-- minimatch@3.0.4
29 silly idealTree +-- ms@0.7.2
29 silly idealTree +-- multimap@1.0.1
29 silly idealTree +-- nan@2.8.0
29 silly idealTree +-- object-component@0.0.3
29 silly idealTree +-- once@1.4.0
29 silly idealTree +-- onoff@1.2.0
29 silly idealTree +-- options@0.0.6
29 silly idealTree +-- parsejson@0.0.3
29 silly idealTree +-- parseqs@0.0.5
29 silly idealTree +-- parseuri@0.0.5
29 silly idealTree +-- path-is-absolute@1.0.1
29 silly idealTree +-- rimraf@2.7.1
29 silly idealTree +-- sleep@5.2.4
29 silly idealTree | `-- nan@2.15.0
29 silly idealTree +-- slide@1.1.6
29 silly idealTree +-- socket.io-client@1.7.4
29 silly idealTree +-- socket.io-parser@2.3.1
29 silly idealTree | +-- component-emitter@1.1.2
29 silly idealTree | +-- debug@2.2.0
29 silly idealTree | `-- ms@0.7.1
29 silly idealTree +-- to-array@0.1.4
29 silly idealTree +-- ultron@1.0.2
29 silly idealTree +-- universalify@0.1.2
29 silly idealTree +-- v-conf@1.4.3
29 silly idealTree | +-- fs-extra@3.0.1
29 silly idealTree | `-- jsonfile@3.0.1
29 silly idealTree +-- wrappy@1.0.2
29 silly idealTree +-- write-file-atomic@1.3.1
29 silly idealTree +-- ws@1.1.5
29 silly idealTree +-- wtf-8@1.0.0
29 silly idealTree +-- xmlhttprequest-ssl@1.6.3
29 silly idealTree `-- yeast@0.1.2
30 silly install generateActionsToTake
31 timing stage:generateActionsToTake Completed in 44ms
32 silly diffTrees action count 4
33 silly diffTrees add bindings@1.3.1
34 silly diffTrees add nan@2.8.0
35 silly diffTrees add epoll@1.0.2
36 silly diffTrees add onoff@1.2.0
37 silly decomposeActions action count 32
38 silly decomposeActions fetch bindings@1.3.1
39 silly decomposeActions extract bindings@1.3.1
40 silly decomposeActions preinstall bindings@1.3.1
41 silly decomposeActions build bindings@1.3.1
42 silly decomposeActions install bindings@1.3.1
43 silly decomposeActions postinstall bindings@1.3.1
44 silly decomposeActions finalize bindings@1.3.1
45 silly decomposeActions refresh-package-json bindings@1.3.1
46 silly decomposeActions fetch nan@2.8.0
47 silly decomposeActions extract nan@2.8.0
48 silly decomposeActions preinstall nan@2.8.0
49 silly decomposeActions build nan@2.8.0
50 silly decomposeActions install nan@2.8.0
51 silly decomposeActions postinstall nan@2.8.0
52 silly decomposeActions finalize nan@2.8.0
53 silly decomposeActions refresh-package-json nan@2.8.0
54 silly decomposeActions fetch epoll@1.0.2
55 silly decomposeActions extract epoll@1.0.2
56 silly decomposeActions preinstall epoll@1.0.2
57 silly decomposeActions build epoll@1.0.2
58 silly decomposeActions install epoll@1.0.2
59 silly decomposeActions postinstall epoll@1.0.2
60 silly decomposeActions finalize epoll@1.0.2
61 silly decomposeActions refresh-package-json epoll@1.0.2
62 silly decomposeActions fetch onoff@1.2.0
63 silly decomposeActions extract onoff@1.2.0
64 silly decomposeActions preinstall onoff@1.2.0
65 silly decomposeActions build onoff@1.2.0
66 silly decomposeActions install onoff@1.2.0
67 silly decomposeActions postinstall onoff@1.2.0
68 silly decomposeActions finalize onoff@1.2.0
69 silly decomposeActions refresh-package-json onoff@1.2.0
70 silly install executeActions
71 silly doSerial global-install 32
72 verbose correctMkdir /home/volumio/.npm/_locks correctMkdir not in flight; initializing
73 verbose lock using /home/volumio/.npm/_locks/staging-09e82038d0f733ea.lock for /data/plugins/system_controller/gpio_control/node_modules/.staging
74 silly doParallel extract 4
75 silly extract bindings@1.3.1
76 silly extract nan@2.8.0
77 silly extract epoll@1.0.2
78 silly extract onoff@1.2.0
79 silly tarball trying bindings@~1.3.0 by hash: sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==
80 silly tarball trying nan@~2.8.0 by hash: sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=
81 silly tarball trying epoll@~1.0.2 by hash: sha512-3t2crZPej4v60YYvXE/pgJ62D4RZBd/UsEXsHd+H3xtDre0vO8aV9O+0ThIPlfZtHJ4vMPhz55fYK1j37rX9Ng==
82 silly tarball trying onoff@^1.1.1 by hash: sha512-o41qBIIs6agXRjryGBIJpq1xour69VDBfROf3IX+wiwutIowPZDcjTRCqFo+HYleiQngO1wfNqHWpjm0l0oYwQ==
83 timing audit submit Completed in 302ms
84 silly extract bindings@~1.3.0 extracted to /data/plugins/system_controller/gpio_control/node_modules/.staging/bindings-e641f0a9 (252ms)
85 http fetch POST 200 https://registry.npmjs.org/-/npm/v1/security/audits/quick 303ms
86 timing audit body Completed in 8ms
87 silly extract epoll@~1.0.2 extracted to /data/plugins/system_controller/gpio_control/node_modules/.staging/epoll-cd31b40b (349ms)
88 silly extract onoff@^1.1.1 extracted to /data/plugins/system_controller/gpio_control/node_modules/.staging/onoff-ea79436a (366ms)
89 silly extract nan@~2.8.0 extracted to /data/plugins/system_controller/gpio_control/node_modules/.staging/nan-8e935b41 (393ms)
90 timing action:extract Completed in 406ms
91 silly doReverseSerial unbuild 32
92 silly doSerial remove 32
93 silly doSerial move 32
94 silly doSerial finalize 32
95 silly finalize /data/plugins/system_controller/gpio_control/node_modules/bindings
96 silly finalize /data/plugins/system_controller/gpio_control/node_modules/nan
97 silly finalize /data/plugins/system_controller/gpio_control/node_modules/epoll
98 silly finalize /data/plugins/system_controller/gpio_control/node_modules/onoff
99 timing action:finalize Completed in 31ms
100 silly doParallel refresh-package-json 4
101 silly refresh-package-json /data/plugins/system_controller/gpio_control/node_modules/bindings
102 silly refresh-package-json /data/plugins/system_controller/gpio_control/node_modules/nan
103 silly refresh-package-json /data/plugins/system_controller/gpio_control/node_modules/epoll
104 silly refresh-package-json /data/plugins/system_controller/gpio_control/node_modules/onoff
105 timing action:refresh-package-json Completed in 66ms
106 silly doParallel preinstall 4
107 silly preinstall bindings@1.3.1
108 info lifecycle bindings@1.3.1~preinstall: bindings@1.3.1
109 silly preinstall nan@2.8.0
110 info lifecycle nan@2.8.0~preinstall: nan@2.8.0
111 silly preinstall epoll@1.0.2
112 info lifecycle epoll@1.0.2~preinstall: epoll@1.0.2
113 silly preinstall onoff@1.2.0
114 info lifecycle onoff@1.2.0~preinstall: onoff@1.2.0
115 timing action:preinstall Completed in 8ms
116 silly doSerial build 32
117 silly build bindings@1.3.1
118 info linkStuff bindings@1.3.1
119 silly linkStuff bindings@1.3.1 has /data/plugins/system_controller/gpio_control/node_modules as its parent node_modules
120 silly build nan@2.8.0
121 info linkStuff nan@2.8.0
122 silly linkStuff nan@2.8.0 has /data/plugins/system_controller/gpio_control/node_modules as its parent node_modules
123 silly build epoll@1.0.2
124 info linkStuff epoll@1.0.2
125 silly linkStuff epoll@1.0.2 has /data/plugins/system_controller/gpio_control/node_modules as its parent node_modules
126 silly build onoff@1.2.0
127 info linkStuff onoff@1.2.0
128 silly linkStuff onoff@1.2.0 has /data/plugins/system_controller/gpio_control/node_modules as its parent node_modules
129 timing action:build Completed in 9ms
130 silly doSerial global-link 32
131 silly doParallel update-linked 0
132 silly doSerial install 32
133 silly install bindings@1.3.1
134 info lifecycle bindings@1.3.1~install: bindings@1.3.1
135 silly install nan@2.8.0
136 info lifecycle nan@2.8.0~install: nan@2.8.0
137 silly install epoll@1.0.2
138 info lifecycle epoll@1.0.2~install: epoll@1.0.2
139 verbose lifecycle epoll@1.0.2~install: unsafe-perm in lifecycle true
140 verbose lifecycle epoll@1.0.2~install: PATH: /usr/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/data/plugins/system_controller/gpio_control/node_modules/epoll/node_modules/.bin:/data/plugins/system_controller/gpio_control/node_modules/.bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
141 verbose lifecycle epoll@1.0.2~install: CWD: /data/plugins/system_controller/gpio_control/node_modules/epoll
142 silly lifecycle epoll@1.0.2~install: Args: [ '-c', 'node-gyp rebuild' ]
143 silly lifecycle epoll@1.0.2~install: Returned: code: 1  signal: null
144 info lifecycle epoll@1.0.2~install: Failed to exec install script
145 timing action:install Completed in 8331ms
146 verbose unlock done using /home/volumio/.npm/_locks/staging-09e82038d0f733ea.lock for /data/plugins/system_controller/gpio_control/node_modules/.staging
147 timing stage:rollbackFailedOptional Completed in 141ms
148 timing stage:runTopLevelLifecycles Completed in 13397ms
149 silly saveTree gpio_control@0.0.1
149 silly saveTree +-- child_process@1.0.2
149 silly saveTree +-- fs-extra@0.28.0
149 silly saveTree | +-- graceful-fs@4.2.9
149 silly saveTree | +-- jsonfile@2.4.0
149 silly saveTree | +-- klaw@1.3.1
149 silly saveTree | +-- path-is-absolute@1.0.1
149 silly saveTree | `-- rimraf@2.7.1
149 silly saveTree |   `-- glob@7.2.0
149 silly saveTree |     +-- fs.realpath@1.0.0
149 silly saveTree |     +-- inflight@1.0.6
149 silly saveTree |     | +-- once@1.4.0
149 silly saveTree |     | | `-- wrappy@1.0.2
149 silly saveTree |     | `-- wrappy@1.0.2
149 silly saveTree |     +-- inherits@2.0.4
149 silly saveTree |     +-- minimatch@3.0.4
149 silly saveTree |     | `-- brace-expansion@1.1.11
149 silly saveTree |     |   +-- balanced-match@1.0.2
149 silly saveTree |     |   `-- concat-map@0.0.1
149 silly saveTree |     `-- once@1.4.0
149 silly saveTree +-- kew@0.7.0
149 silly saveTree +-- onoff@1.2.0
149 silly saveTree | `-- epoll@1.0.2
149 silly saveTree |   +-- bindings@1.3.1
149 silly saveTree |   `-- nan@2.8.0
149 silly saveTree +-- sleep@5.2.4
149 silly saveTree | `-- nan@2.15.0
149 silly saveTree +-- socket.io-client@1.7.4
149 silly saveTree | +-- backo2@1.0.2
149 silly saveTree | +-- component-bind@1.0.0
149 silly saveTree | +-- component-emitter@1.2.1
149 silly saveTree | +-- debug@2.3.3
149 silly saveTree | | `-- ms@0.7.2
149 silly saveTree | +-- engine.io-client@1.8.6
149 silly saveTree | | +-- component-inherit@0.0.3
149 silly saveTree | | +-- engine.io-parser@1.3.2
149 silly saveTree | | | +-- after@0.8.2
149 silly saveTree | | | +-- arraybuffer.slice@0.0.6
149 silly saveTree | | | +-- base64-arraybuffer@0.1.5
149 silly saveTree | | | +-- blob@0.0.4
149 silly saveTree | | | +-- has-binary@0.1.7
149 silly saveTree | | | | `-- isarray@0.0.1
149 silly saveTree | | | `-- wtf-8@1.0.0
149 silly saveTree | | +-- has-cors@1.1.0
149 silly saveTree | | +-- indexof@0.0.1
149 silly saveTree | | +-- parsejson@0.0.3
149 silly saveTree | | | `-- better-assert@1.0.2
149 silly saveTree | | |   `-- callsite@1.0.0
149 silly saveTree | | +-- parseqs@0.0.5
149 silly saveTree | | +-- parseuri@0.0.5
149 silly saveTree | | +-- ws@1.1.5
149 silly saveTree | | | +-- options@0.0.6
149 silly saveTree | | | `-- ultron@1.0.2
149 silly saveTree | | +-- xmlhttprequest-ssl@1.6.3
149 silly saveTree | | `-- yeast@0.1.2
149 silly saveTree | +-- has-binary@0.1.7
149 silly saveTree | +-- indexof@0.0.1
149 silly saveTree | +-- object-component@0.0.3
149 silly saveTree | +-- parseuri@0.0.5
149 silly saveTree | +-- socket.io-parser@2.3.1
149 silly saveTree | | +-- component-emitter@1.1.2
149 silly saveTree | | +-- debug@2.2.0
149 silly saveTree | | | `-- ms@0.7.1
149 silly saveTree | | `-- json3@3.3.2
149 silly saveTree | `-- to-array@0.1.4
149 silly saveTree `-- v-conf@1.4.3
149 silly saveTree   +-- fs-extra@3.0.1
149 silly saveTree   | +-- jsonfile@3.0.1
149 silly saveTree   | `-- universalify@0.1.2
149 silly saveTree   +-- multimap@1.0.1
149 silly saveTree   `-- write-file-atomic@1.3.1
149 silly saveTree     +-- imurmurhash@0.1.4
149 silly saveTree     `-- slide@1.1.6
150 warn gpio_control@0.0.1 No repository field.
151 verbose stack Error: epoll@1.0.2 install: `node-gyp rebuild`
151 verbose stack Exit status 1
151 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:332:16)
151 verbose stack     at EventEmitter.emit (events.js:315:20)
151 verbose stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
151 verbose stack     at ChildProcess.emit (events.js:315:20)
151 verbose stack     at maybeClose (internal/child_process.js:1048:16)
151 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:288:5)
152 verbose pkgid epoll@1.0.2
153 verbose cwd /home/volumio
154 verbose Linux 5.10.90-v7+
155 verbose argv "/usr/bin/node" "/usr/bin/npm" "install" "--prefix" "/data/plugins/system_controller/gpio_control" "onoff@^1.1.1"
156 verbose node v14.15.4
157 verbose npm  v6.14.10
158 error code ELIFECYCLE
159 error errno 1
160 error epoll@1.0.2 install: `node-gyp rebuild`
160 error Exit status 1
161 error Failed at the epoll@1.0.2 install script.
161 error This is probably not a problem with npm. There is likely additional logging output above.
162 verbose exit [ 1, true ]

1 Like