2017-08-02 6 views
0

J'écris un démon en utilisant node.js, qui s'exécute sous systemd et monitor the status of the power supply voltage on a raspberry pi 2 B ."initMboxBlock: init mbox zaps a échoué" et "Impossible de verrouiller /var/run/pigpio.id" lors de l'utilisation de la bibliothèque pigpio dans un démon

J'utilise le node.js wrapper au pigpio library

Le code que j'ai commencé avec était comme suit:

var Gpio = require('pigpio').Gpio, 
gpio; 

gpio = new Gpio(35); 

const checkIntervalDuringBrownout = 5000; 
const checkIntervalDuringGoodSupply = 100; 
var timer = 100; 

function startTimer() { 
    setTimeout(function() { 
    var brownoutState = isUnderVoltage(); 

    if(brownoutState) { 
     console.log("Brownout - telling the syslog ..."); 
     console.log("Brownout ... Power Supply Voltage went below 4.63 V"); 
     timer = checkIntervalDuringBrownout; 
    } 
    else { 
     timer = checkIntervalDuringGoodSupply; 
    } 
    startTimer(); 
    }, timer); 
} 

function isUnderVoltage() { 
    var ledStatus = gpio.digitalRead(); 
    if(ledStatus === 1) { 
    return 0; 
    } 
    else if (ledStatus === 0) { 
    //console.log("brownout"); 
    return 1; 
    } 
    else { 
    console.log("We got neither a 1 or a 0: ", ledStatus); 
    } 
} 

startTimer(); 

devenais mystérieux messages d'erreur dans le syslog:

Aug 2 00:22:10 chintu systemd[1]: Started Brownout Monitor and Logger written using node.js. 
Aug 2 00:22:11 chintu brownout-monitor[5203]: 2017-08-02 00:22:11 initMboxBlock: init mbox zaps failed 
Aug 2 00:22:11 chintu brownout-monitor[5203]: /home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:11 
Aug 2 00:22:11 chintu brownout-monitor[5203]: pigpio.gpioInitialise(); 
Aug 2 00:22:11 chintu brownout-monitor[5203]:^
Aug 2 00:22:11 chintu brownout-monitor[5203]: Error: pigpio error -1 in gpioInitialise 
Aug 2 00:22:11 chintu brownout-monitor[5203]: at Error (native) 
Aug 2 00:22:11 chintu brownout-monitor[5203]: at initializePigpio (/home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:11:12) 
Aug 2 00:22:11 chintu brownout-monitor[5203]: at new Gpio (/home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:25:3) 

et

Aug 2 00:17:11 chintu systemd[1]: Starting Brownout Monitor and Logger written using node.js... 
Aug 2 00:17:11 chintu systemd[1]: Started Brownout Monitor and Logger written using node.js. 
Aug 2 00:17:12 chintu brownout-monitor[4555]: 2017-08-02 00:17:12 initInitialise: Can't lock /var/run/pigpio.pid 
Aug 2 00:17:12 chintu brownout-monitor[4555]: /home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:11 
Aug 2 00:17:12 chintu brownout-monitor[4555]: pigpio.gpioInitialise(); 
Aug 2 00:17:12 chintu brownout-monitor[4555]:^
Aug 2 00:17:12 chintu brownout-monitor[4555]: Error: pigpio error -1 in gpioInitialise 
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Error (native) 
Aug 2 00:17:12 chintu brownout-monitor[4555]: at initializePigpio (/home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:11:12) 
Aug 2 00:17:12 chintu brownout-monitor[4555]: at new Gpio (/home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:25:3) 
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Object.<anonymous> (/home/pi/sandbox/raspi2-power-monitor/index.js:7:8) 
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Module._compile (module.js:570:32) 
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Object.Module._extensions..js (module.js:579:10) 
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Module.load (module.js:487:32) 
Aug 2 00:17:12 chintu brownout-monitor[4555]: at tryModuleLoad (module.js:446:12) 
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Function.Module._load (module.js:438:3) 
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Module.runMain (module.js:604:10) 
Aug 2 00:17:12 chintu systemd[1]: brownout-monitor.service: main process exited, code=exited, status=1/FAILURE 
Aug 2 00:17:12 chintu systemd[1]: Unit brownout-monitor.service entered failed state. 

Vous cherchez ces erreurs led me to a page où la solution a dit -

Je vais devoir vérifier le code, mais du haut de ma tête le plus probable est que le GPU (qui alloue de la mémoire mbox DMA) n'a pas mémoire de secours.

Comment est-ce que cela peut être fixé?

Répondre

0

La solution qui a fixé les erreurs est:

Manipulation des signaux Systemd envoie au processus de noeud et veiller à ce que la bibliothèque de pigpio fait une terminaison propre en utilisant l'appel pigpio.terminate() dans le gestionnaire.

process.on('SIGHUP', shutdown); 
process.on('SIGINT', shutdown); 
process.on('SIGCONT', shutdown); 
process.on('SIGTERM', shutdown); 

function shutdown() { 
    pigpio.terminate(); 
    clearInterval(timerVar); 
    console.log('raspi2-brownout-watcher must exit, performed cleanup.'); 
    process.exit(0); 
}