[PLUGIN] GPIO CONTROL: CONTROL GPIO WITH VOLUMIO2 EVENTS

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

I took the version (range) for ā€œonoffā€ from ā€œpackage.jsonā€ of the Volumio 2 version of the pluginā€¦ Probably that version is too old. Try

npm install --prefix "/data/plugins/system_controller/gpio_control" onoff@^6.0.0

It could also be necessary to do the same for the module ā€œsleepā€:

npm install --prefix "/data/plugins/system_controller/gpio_control" sleep@6.2.0

Still in error :

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

So the installation of the module went through, I guess.

Please show the result of

ls -al /data/plugins/system_controller/gpio_control/node_modules

`ls -al /data/plugins/system_controller/gpio_control/node_modules`
drwxr-xr-x 65 volumio volumio 3072 Jan 28 15:57 .
drwxr-xr-x  4 volumio volumio 1024 Jan 28 15:56 ..
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 after
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 arraybuffer.slice
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 backo2
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 balanced-match
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 base64-arraybuffer
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 better-assert
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 bindings
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 blob
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 brace-expansion
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 callsite
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 child_process
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 component-bind
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 component-emitter
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 component-inherit
drwxr-xr-x  4 volumio volumio 1024 Jan 28 15:56 concat-map
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 debug
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 engine.io-client
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 engine.io-parser
drwxr-xr-x  6 volumio volumio 1024 Jan 28 15:56 epoll
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 file-uri-to-path
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 fs-extra
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 fs.realpath
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 glob
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 graceful-fs
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 has-binary
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 has-cors
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 imurmurhash
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 indexof
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 inflight
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 inherits
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 isarray
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 json3
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 jsonfile
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 kew
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 klaw
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 lodash.debounce
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 minimatch
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 ms
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 multimap
drwxr-xr-x  4 volumio volumio 1024 Jan 28 15:56 nan
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 object-component
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 once
drwxr-xr-x  4 volumio volumio 1024 Jan 28 15:57 onoff
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 options
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 parsejson
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 parseqs
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 parseuri
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 path-is-absolute
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 rimraf
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 sleep
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 slide
drwxr-xr-x  4 volumio volumio 1024 Jan 28 15:56 socket.io-client
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 socket.io-parser
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 to-array
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 ultron
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 universalify
drwxr-xr-x  4 volumio volumio 1024 Jan 28 15:56 v-conf
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 wrappy
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 write-file-atomic
drwxr-xr-x  3 volumio volumio 1024 Jan 28 15:56 ws
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 wtf-8
drwxr-xr-x  5 volumio volumio 1024 Jan 28 15:56 xmlhttprequest-ssl
drwxr-xr-x  2 volumio volumio 1024 Jan 28 15:56 yeast

Ok, I just tried it and succeeded installing the plugin like this:

  1. Remove the installed plugin, i.e. uninstall it.
  2. Unzip the downloaded .zip package (assuming you are in ā€œ/home/volumioā€):

miniunzip gpio_control.zip -d gpio_control

  1. Run (not tested if this is strictly necessary)

rm -rf gpio_control/node_modules

rm gpio_control/package-lock.json

  1. Then execute

cd gpio_control

npm install onoff@^6.0.0

npm install sleep@^6.2.0

volumio plugin install

2 Likes

It works ! :laughing:
You have a great knowledge, I donā€™t know exactly what Iā€™ve done but thank you for your support :slight_smile:
Now I control my backligt screen !

@supercrab : some suggestions for futur GPIO Control releases :

  • add configurable delay for each command (could be useful to switch off a screen some secondes after playing)
  • manage the screensaver event from ā€œTouch Displayā€ plugin
  • allow pwm values (could be useful to dim a screen)

Thanks a lot !

2 Likes

Great plugin supercrab!!

I was wondering if there is a possibility where instead of just leaving a gpio pin high, - I could make a gpio pin go high, delay 1 second and then gpio pin low?

I want to make it act like a digital momentary button pressā€¦

Thanks

1 Like

Thanks have noted your suggestions too! :+1:t4::sunglasses:

Thanks for your suggestions will try it when I get some time

Thanks for the tips!! Iā€™m gonna have to pull my finger out and get this plugin and my mod_plugin updated!

`
Dā€™oh I have both onoff and sleep modules in /data/plugins/system_hardware/gpio_control/node_modules but I still get cannot find module 'onoff'

What could be wrong?

I donā€™t use the plugin, but just tried if installing and starting it on Volumio 3 works.

After installing the ā€œbuild-essentialā€ package by running

sudo apt-get update
sudo apt-get -y install build-essential

I downloaded ā€œgpio_control.zipā€ from volumio-plugins/plugins/volumio/armhf/system_controller/gpio_control at gh-pages Ā· volumio/volumio-plugins Ā· GitHub and executed the steps lined out in post #67.

Although this is not the recommended way to install a plugin in Volumio 3 and especially lacks a Volumio 3 compliant ā€œpackage.jsonā€, it was sufficient to make the plugin start.

1 Like