2020年7月28日火曜日

更にRaspberry Pi 4追加

Raspberry Pi 3がを起こして仕事させようと思っていましたが、今時4GBMemoryのRaspberry Pi 4があるとの事で、Amazonしてみたら、価格もPi 3の何倍も!という事でもないので、つい購入してしまいました。 消費電力は少し多いのでファイン付きのケースも買って、プログラミング用に。 
既存のPi 3は4リレーのシールド(Kuman製)を乗っけて、リモート制御に使用(将来)することに、、、。 
Kumanのボードに乗っているSRA 05VDC-CLって、125V maxとなっていますので、amazonの表示は間違ってますね。 リニアの電源制御用には別のリレーが必要です。 Windows10から、FreeBSD, Raspberry Pi3, Raspberry Pi4を動かしてみましたが、問題なく動きますね(当たり前か)。

どういうフローにするのか、目下考え中ですが;
メイン電源を入れる。
環境条件をチェック(風、雨)する。
発電機を動かす。
周辺に障害物・人等が居ないかチェック。
クランクアップタワーの昇降(上昇)
リグの電源の投入。
リニア・周辺装置の電源の投入。
アンテナの切り替え。
ローテーターの制御。
リニア・周辺装置の電源off
リグの電源のoff
クランクアップタワーの昇降(降下)
発電機の停止
メイン電源のoff

 この間、常時環境(映像?)と電源電圧のモニターがreal timeで行う。
通信ラインが切れたり、制御不能になった時に、全てがoffになる必要があり(タワーの降下をどうするか?)。

といった、所でしょうか。 環境は一応整いましたが、ビジュアルで、これだけの仕事を見やすい形で行わせるというのは、かなりの労力が必要ですね。 node-redの理解から始めるとなると、結構時間が掛かりそうだなー。

取り敢えずは、node-redのボタンで、リレーのon/offの確認。(Pythonの簡単なプログラムでの確認ではちゃんと動いていました)。


2020年7月27日月曜日

Windows10でCapLockをCtrlに

Windows10から、Xmingや、「リモートデスクトップ(xrdp)」等でUnixマシンに繋いで作業していると、ついemacs使いたくなる、と、ctrlキーの使用頻度が増え、如何にも使い難い。
今までは、Unixマシンの方のキー配列を変更して対応していましたが、これも、unixマシン個々に対応してゆかなければならないので、煩雑。 
「Windows10上でキーボート配列弄ればいいじゃん!」と、ググってみると、同じ問題を抱える人たちは多いようで、色々ありますね。 
最初regeditでレジストリを弄ってみた(これが一番多い)のですが、見事失敗! 何故かCapsLockが半角/全角のキーと同じになって(両方とも全角半角切り替えになっちゃった)、如何にも使い難い。 挙句にregistryのバックアップで戻そうとすると、エラーで出来ない、八方ふさがりの状態に、、、。 
「今日はついてないなー」と犬も散歩をして気分転換。 再度、ググったら有りました。 Ctrl2cap!!
これ使ってCapsLockキーにctrlをアサインして、取り敢えず解決。 このユーティリティの名前ちょっと違和感がありますが、、、。 ま、いいか。

2020年7月25日土曜日

node-red早速トラブル!

node-red-(start/stop/restart)など動いて、快適でエディターを弄ろうか、、、と思いましたが、まずはgpioの操作が出来なければ、始まらない!ということで、npm install node-red-contrib-gpioとやると、下のようなエラーが、、、。 ソースのコンパイルにcppの所で失敗しているようなので、これは拙い。  長期戦になりそうです。
何方か、解決方法教えて!
rpi gpioってのがあるので、それを使えばよさそうな、気もします。
pi@raspberrypi:~/.node-red $ npm install node-red-contrib-gpio

> serialport@6.0.5 install /home/pi/.node-red/node_modules/firmata/node_modules/serialport
> prebuild-install || node-gyp rebuild

prebuild-install WARN install No prebuilt binaries found (target=12.18.3 runtime=node arch=arm platform=linux)
make: ディレクトリ '/home/pi/.node-red/node_modules/firmata/node_modules/serialport/build' に入ります
  CXX(target) Release/obj.target/serialport/src/serialport.o
In file included from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h: In function ‘void Nan::AsyncQueueWorker(Nan::AsyncWorker*)’:
../../../../nan/nan.h:2294: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(AsyncExecuteComplete)
                                                              ^
../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Open(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/serialport.cpp:41:48: error: no matching function for call to ‘v8::Value::ToString()’
   v8::String::Utf8Value path(info[0]->ToString());
                                                ^
In file included from /home/pi/.cache/node-gyp/12.18.3/include/node/node.h:67,
                 from ../../../../nan/nan.h:56,
                 from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2668:44: note: candidate: ‘v8::MaybeLocal v8::Value::ToString(v8::Local) const’
   V8_WARN_UNUSED_RESULT MaybeLocal ToString(
                                            ^~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2668:44: note:   candidate expects 1 argument, 0 provided
In file included from /home/pi/.cache/node-gyp/12.18.3/include/node/v8-internal.h:14,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:27,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/node.h:67,
                 from ../../../../nan/nan.h:56,
                 from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2684:31: note: candidate: ‘v8::Local v8::Value::ToString(v8::Isolate*) const’
                 Local ToString(Isolate* isolate) const);
                               ^~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2684:31: note:   candidate expects 1 argument, 0 provided
                 Local ToString(Isolate* isolate) const);
                               ^~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
../src/serialport.cpp:48:53: error: no matching function for call to ‘v8::Value::ToObject()’
   v8::Local options = info[1]->ToObject();
                                                     ^
In file included from /home/pi/.cache/node-gyp/12.18.3/include/node/node.h:67,
                 from ../../../../nan/nan.h:56,
                 from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2672:44: note: candidate: ‘v8::MaybeLocal v8::Value::ToObject(v8::Local) const’
   V8_WARN_UNUSED_RESULT MaybeLocal ToObject(
                                            ^~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2672:44: note:   candidate expects 1 argument, 0 provided
In file included from /home/pi/.cache/node-gyp/12.18.3/include/node/v8-internal.h:14,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:27,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/node.h:67,
                 from ../../../../nan/nan.h:56,
                 from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2686:31: note: candidate: ‘v8::Local v8::Value::ToObject(v8::Isolate*) const’
                 Local ToObject(Isolate* isolate) const);
                               ^~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2686:31: note:   candidate expects 1 argument, 0 provided
                 Local ToObject(Isolate* isolate) const);
                               ^~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
../src/serialport.cpp:78:69: 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]
   uv_queue_work(uv_default_loop(), req, EIO_Open, (uv_after_work_cb)EIO_AfterOpen);
                                                                     ^~~~~~~~~~~~~
../src/serialport.cpp: In function ‘void EIO_AfterOpen(uv_work_t*)’:
../src/serialport.cpp:95:30: warning: ‘v8::Local Nan::Callback::Call(int, v8::Local*) const’ is deprecated [-Wdeprecated-declarations]
   data->callback.Call(2, argv);
                              ^
In file included from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1742:3: note: declared here
   Call(int argc, v8::Local argv[]) const {
   ^~~~
../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Update(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/serialport.cpp:113:53: error: no matching function for call to ‘v8::Value::ToObject()’
   v8::Local options = info[1]->ToObject();
                                                     ^
In file included from /home/pi/.cache/node-gyp/12.18.3/include/node/node.h:67,
                 from ../../../../nan/nan.h:56,
                 from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2672:44: note: candidate: ‘v8::MaybeLocal v8::Value::ToObject(v8::Local) const’
   V8_WARN_UNUSED_RESULT MaybeLocal ToObject(
                                            ^~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2672:44: note:   candidate expects 1 argument, 0 provided
In file included from /home/pi/.cache/node-gyp/12.18.3/include/node/v8-internal.h:14,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:27,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/node.h:67,
                 from ../../../../nan/nan.h:56,
                 from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2686:31: note: candidate: ‘v8::Local v8::Value::ToObject(v8::Isolate*) const’
                 Local ToObject(Isolate* isolate) const);
                               ^~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2686:31: note:   candidate expects 1 argument, 0 provided
                 Local ToObject(Isolate* isolate) const);
                               ^~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
../src/serialport.cpp:135:71: 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]
 uv_queue_work(uv_default_loop(), req, EIO_Update, (uv_after_work_cb)EIO_AfterUpdate);
                                                                     ^~~~~~~~~~~~~~~

../src/serialport.cpp: In function ‘void EIO_AfterUpdate(uv_work_t*)’:
../src/serialport.cpp:150:30: warning: ‘v8::Local Nan::Callback::Call(int, v8::Local*) const’ is deprecated [-Wdeprecated-declarations]
   data->callback.Call(1, argv);
                              ^
In file included from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1742:3: note: declared here
   Call(int argc, v8::Local argv[]) const {
   ^~~~
../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Close(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/serialport.cpp:175:70: 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]
  uv_queue_work(uv_default_loop(), req, EIO_Close, (uv_after_work_cb)EIO_AfterClose);
                                                                     ^~~~~~~~~~~~~~

../src/serialport.cpp: In function ‘void EIO_AfterClose(uv_work_t*)’:
../src/serialport.cpp:188:30: warning: ‘v8::Local Nan::Callback::Call(int, v8::Local*) const’ is deprecated [-Wdeprecated-declarations]
   data->callback.Call(1, argv);
                              ^
In file included from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1742:3: note: declared here
   Call(int argc, v8::Local argv[]) const {
   ^~~~
../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Flush(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/serialport.cpp:215:70: 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]
  uv_queue_work(uv_default_loop(), req, EIO_Flush, (uv_after_work_cb)EIO_AfterFlush);
                                                                     ^~~~~~~~~~~~~~

../src/serialport.cpp: In function ‘void EIO_AfterFlush(uv_work_t*)’:
../src/serialport.cpp:231:30: warning: ‘v8::Local Nan::Callback::Call(int, v8::Local*) const’ is deprecated [-Wdeprecated-declarations]
   data->callback.Call(1, argv);
                              ^
In file included from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1742:3: note: declared here
   Call(int argc, v8::Local argv[]) const {
   ^~~~
../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Set(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/serialport.cpp:250:53: error: no matching function for call to ‘v8::Value::ToObject()’
   v8::Local options = info[1]->ToObject();
                                                     ^
In file included from /home/pi/.cache/node-gyp/12.18.3/include/node/node.h:67,
                 from ../../../../nan/nan.h:56,
                 from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2672:44: note: candidate: ‘v8::MaybeLocal v8::Value::ToObject(v8::Local) const’
   V8_WARN_UNUSED_RESULT MaybeLocal ToObject(
                                            ^~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2672:44: note:   candidate expects 1 argument, 0 provided
In file included from /home/pi/.cache/node-gyp/12.18.3/include/node/v8-internal.h:14,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:27,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/node.h:67,
                 from ../../../../nan/nan.h:56,
                 from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2686:31: note: candidate: ‘v8::Local v8::Value::ToObject(v8::Isolate*) const’
                 Local ToObject(Isolate* isolate) const);
                               ^~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:2686:31: note:   candidate expects 1 argument, 0 provided
                 Local ToObject(Isolate* isolate) const);
                               ^~~~~~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
../src/serialport.cpp:270:68: 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]
   uv_queue_work(uv_default_loop(), req, EIO_Set, (uv_after_work_cb)EIO_AfterSet);
                                                                    ^~~~~~~~~~~~
../src/serialport.cpp: In function ‘void EIO_AfterSet(uv_work_t*)’:
../src/serialport.cpp:285:30: warning: ‘v8::Local Nan::Callback::Call(int, v8::Local*) const’ is deprecated [-Wdeprecated-declarations]
   data->callback.Call(1, argv);
                              ^
In file included from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1742:3: note: declared here
   Call(int argc, v8::Local argv[]) const {
   ^~~~
../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Get(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/serialport.cpp:314:68: 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]
   uv_queue_work(uv_default_loop(), req, EIO_Get, (uv_after_work_cb)EIO_AfterGet);
                                                                    ^~~~~~~~~~~~
../src/serialport.cpp: In function ‘void EIO_AfterGet(uv_work_t*)’:
../src/serialport.cpp:329:96: warning: ‘bool v8::Object::Set(v8::Local, v8::Local)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
 an::New("cts").ToLocalChecked(), Nan::New(data->cts));
                                                                              ^

In file included from /home/pi/.cache/node-gyp/12.18.3/include/node/v8-internal.h:14,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:27,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/node.h:67,
                 from ../../../../nan/nan.h:56,
                 from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:3499:22: note: declared here
                 bool Set(Local key, Local value));
                      ^~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
../src/serialport.cpp:330:96: warning: ‘bool v8::Object::Set(v8::Local, v8::Local)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
 an::New("dsr").ToLocalChecked(), Nan::New(data->dsr));
                                                                              ^

In file included from /home/pi/.cache/node-gyp/12.18.3/include/node/v8-internal.h:14,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:27,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/node.h:67,
                 from ../../../../nan/nan.h:56,
                 from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:3499:22: note: declared here
                 bool Set(Local key, Local value));
                      ^~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
../src/serialport.cpp:331:96: warning: ‘bool v8::Object::Set(v8::Local, v8::Local)’ is deprecated: Use maybe version [-Wdeprecated-declarations]
 an::New("dcd").ToLocalChecked(), Nan::New(data->dcd));
                                                                              ^

In file included from /home/pi/.cache/node-gyp/12.18.3/include/node/v8-internal.h:14,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:27,
                 from /home/pi/.cache/node-gyp/12.18.3/include/node/node.h:67,
                 from ../../../../nan/nan.h:56,
                 from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
/home/pi/.cache/node-gyp/12.18.3/include/node/v8.h:3499:22: note: declared here
                 bool Set(Local key, Local value));
                      ^~~
/home/pi/.cache/node-gyp/12.18.3/include/node/v8config.h:328:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
../src/serialport.cpp:336:30: warning: ‘v8::Local Nan::Callback::Call(int, v8::Local*) const’ is deprecated [-Wdeprecated-declarations]
   data->callback.Call(2, argv);
                              ^
In file included from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1742:3: note: declared here
   Call(int argc, v8::Local argv[]) const {
   ^~~~
../src/serialport.cpp: In function ‘Nan::NAN_METHOD_RETURN_TYPE Drain(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/serialport.cpp:362:70: 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]
  uv_queue_work(uv_default_loop(), req, EIO_Drain, (uv_after_work_cb)EIO_AfterDrain);
                                                                     ^~~~~~~~~~~~~~

../src/serialport.cpp: In function ‘void EIO_AfterDrain(uv_work_t*)’:
../src/serialport.cpp:377:30: warning: ‘v8::Local Nan::Callback::Call(int, v8::Local*) const’ is deprecated [-Wdeprecated-declarations]
   data->callback.Call(1, argv);
                              ^
In file included from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
../../../../nan/nan.h:1742:3: note: declared here
   Call(int argc, v8::Local argv[]) const {
   ^~~~
../src/serialport.cpp: At global scope:
../src/serialport.cpp:383:28: warning: unnecessary parentheses in declaration of ‘ToParityEnum’ [-Wparentheses]
 SerialPortParity NAN_INLINE(ToParityEnum(const v8::Local& v8str)) {
                            ^
../src/serialport.cpp:402:30: warning: unnecessary parentheses in declaration of ‘ToStopBitEnum’ [-Wparentheses]
 SerialPortStopBits NAN_INLINE(ToStopBitEnum(double stopBits)) {
                              ^
../src/serialport.cpp:413:17: error: variable or field ‘init’ declared void
   void init(v8::Handle target) {
                 ^~~~~~
../src/serialport.cpp:413:17: error: ‘Handle’ is not a member of ‘v8’
../src/serialport.cpp:413:34: error: expected primary-expression before ‘>’ token
   void init(v8::Handle target) {
                                  ^
../src/serialport.cpp:413:36: error: ‘target’ was not declared in this scope
   void init(v8::Handle target) {
                                    ^~~~~~
../src/serialport.cpp:413:36: note: suggested alternative: ‘tzset’
   void init(v8::Handle target) {
                                    ^~~~~~
                                    tzset
In file included from ../../../../nan/nan.h:56,
                 from ../src/./serialport.h:6,
                 from ../src/serialport.cpp:1:
../src/serialport.cpp:437:25: error: ‘init’ was not declared in this scope
 NODE_MODULE(serialport, init);
                         ^~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/node.h:608:36: note: in definition of macro ‘NODE_MODULE_X’
       (node::addon_register_func) (regfunc),                          \
                                    ^~~~~~~
../src/serialport.cpp:437:1: note: in expansion of macro ‘NODE_MODULE’
 NODE_MODULE(serialport, init);
 ^~~~~~~~~~~
../src/serialport.cpp:437:25: note: suggested alternative: ‘int’
 NODE_MODULE(serialport, init);
                         ^~~~
/home/pi/.cache/node-gyp/12.18.3/include/node/node.h:608:36: note: in definition of macro ‘NODE_MODULE_X’
       (node::addon_register_func) (regfunc),                          \
                                    ^~~~~~~
../src/serialport.cpp:437:1: note: in expansion of macro ‘NODE_MODULE’
 NODE_MODULE(serialport, init);
 ^~~~~~~~~~~
make: *** [serialport.target.mk:111: Release/obj.target/serialport/src/serialport.o] エラー 1
make: ディレクトリ '/home/pi/.node-red/node_modules/firmata/node_modules/serialport/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:275:12)
gyp ERR! System Linux 5.4.51-v7+
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/.node-red/node_modules/firmata/node_modules/serialport
gyp ERR! node -v v12.18.3
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok 
npm WARN node-red-project@0.0.1 No repository field.
npm WARN node-red-project@0.0.1 No license field.

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! serialport@6.0.5 install: `prebuild-install || node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the serialport@6.0.5 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/pi/.npm/_logs/2020-07-25T05_37_13_431Z-debug.log
pi@raspberrypi:~/.node-red $ 

2020年7月24日金曜日

Raspberry Piでnode-redを起動させてみた

Facebookにnode-redでFlex6600やPX/GLをコントロールしている記事が出ていたので、早速「node-redって、なんじゃい」という事でnode-redのHPにアクセスしてみると、なんとWEBベースのエディターでグラフィカルにプログラムを作成し、コードはjsonでexport/importでき、libraryもリッチ。 
「あ、これだとRaspberryでリモートシャックの制御をするなんてことが、簡単に出来そう!」という事で、早速groupに参加。

遊んでいたRaspberryPi 3に最新のDebianベースのOS他を、Raspberry Pi imagerを使って、microSD(32GB)に書き込んで立ち上げてみると、すんなり立ち上がった(当たり前か、、)
でもRaspberryにディスプレイ使うのは嫌なので、ここを参考にリモートでWin10からアクセスできるようにする。

その上で、node-redをインストール。 Raspberry Piが立ち上がると同時にnode-redが立ち上がるように設定してしまえば、後はfirefoxからhost address:1880でエディターが立ち上がり、node-redが使えるようになりました。
さて、少しづつ、node-redを勉強して、何か使える物を作ることにします。


左下で立ち上がっている窓がRaspberry Piの画面。その上に、Windows10のFirefoxからhost addrr:1880/でアクセスしている、node-redのグラフィカルエディター。 特に、Raspberryのデスクトップにアクセスする必要はないので、左下の窓は今後は要らない。

2020年7月14日火曜日

ここ数日10mでEUが朝聞こえる

昔の記憶では、10mで朝EUとやった思い出は無いのですが、ここ数日は22Z前後にEUが出来ますね。20z台には、影も雰囲気もありません。 FT8のお陰でしょうか? しかし、結構強く入ってきています。
本当はUSとやりたくて、この時間帯聞いているのですが、gray lineに当たるとこら辺が良く入ってきています。
先月は午後の時間帯にEUが聞こえていましたが、最近はこちらはさっぱり

秋になったら、もう少しよく聞こえるようになるかな? 期待しています。

2020年7月7日火曜日

zfsの不調HDDを交換

zpool status でhddが一台不調なのを見つけ、交換しました。
手順は;
  1.   問題のHDDをoffline
  2.   問題のHDDの電源を切り、取り出す。
  3.   新しいHDDを挿入(この時tail -f /var/log/messages等して、挿入したHDDの名前を確認)
  4.   zpool replace <pool> <取り出したdevice> <新しいdevice>

で、そのうちデータの複製が完了します。
着脱可能な3台収納のHDDケースを使っていますが、埃の溜まり方が半端ない! 時々offlineして、埃を取ってやる必要がありそうです。 (商用のサーバーはどうしているのかな? サーバールームだから、埃は無いか?)

HDDのトラブルは結構多い!

tail -f /var/log/messages
Jul  6 15:24:31 <xxx> kernel: ada3 at ahcich4 bus 0 scbus4 target 0 lun 0
Jul  6 15:24:31 <xxx> kernel: ada3: <ST3000DM007-1WY10G 0001> ACS-3 ATA SATA 3.x device
Jul  6 15:24:31 <xxx> kernel: ada3: Serial Number ZFN3CG9W
Jul  6 15:24:31 <xxx> kernel: ada3: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 8192bytes)
Jul  6 15:24:31 <xxx> kernel: ada3: Command Queueing enabled
Jul  6 15:24:31 <xxx> kernel: ada3: 2861588MB (5860533168 512 byte sectors)
Jul  6 15:24:31 <xxx> kernel: ada3: quirks=0x1<4K>
Jul  6 15:24:31 <xxx> kernel: ada3: Serial Number ZFN3CG9W
Jul  6 15:24:31 <xxx> kernel: ada3: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 8192bytes)
Jul  6 15:24:31 <xxx> kernel: ada3: Command Queueing enabled
Jul  6 15:24:31 <xxx> kernel: ada3: 2861588MB (5860533168 512 byte sectors)
Jul  6 15:24:31 <xxx> kernel: ada3: quirks=0x1<4K>
Jul  6 15:27:06 <xxx> ZFS[57380]: vdev state changed, pool_guid=$10144449840837033772 vdev_guid=$10616007156599679386



# zpool replace zroot 4351727843915028191 ada3
Make sure to wait until resilver is done before rebooting.

If you boot from pool 'zroot', you may need to update
boot code on newly attached disk 'ada3'.

Assuming you use GPT partitioning and 'da0' is your new boot disk
you may use the following command:

 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
#

2020年7月6日月曜日

JPgraph 問題解決!

ソフトの更新を行って誤って、phpが7.3にupgradeされたためのトラブルでした。(JPgraph4.2/4.3ではphp7.2までしかサポートされていない!) で、同じことで悩んでいた方のページを見つけgd_image.inc.phpにパッチを当てることにより、無事問題解決!
JPgraphとerror no.で検索すると、対策が出てきませんが、php73, JPgraphで検索すると上のページが出てきます。 偶々、JPgraphのHP見ていて、対応がphp72までだったので、皆さんどうしているのかな?と思って検索したらたどり着きました。 良かった!

ついでにphp73 -> php74にしてみましたが、問題なく表示されました。




2020年7月5日日曜日

突然 JPgraphがストを起こしちゃった!

何故か、突然localのapache24が動かなくなってしまい、サーバーを再起動すると、何故か、JPgraphがうまく動いていない! メッセージにはttfフォントへのアクセスを確認!とあるけど、なにも弄ってないので、??? 
確認するも、どこもおかしなところはない??
原因が分からず、現時点で対処法も不明、、、、。 ググってもそれらしい答えも無し!


php のインストールの確認

phpって最初のfacebook書くときに使われたみたいで、それなりに歴史のある言語で、私も2006年位から使っていますが、CLIで使う事はあまり無いので、apacheとの連携のトラブル(mod_phpのバージョンの齟齬)などは気になりますが、拡張モジュールのインストールの問題に...