Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Anfängerfrage: Funktion umschreiben
#1
Hallo zusammen,
ich bräuchte Hilfe beim Umschreiben einer Funktion...

Auf einem Raspberry nutze ich zwei 1-wire-Busse. Das Plugin "ds18b20" für node-red zeigt mir immer nur die Thermostate an, die in der Datei ''/sys/bus/w1/devices/w1_bus_master'''1'''/w1_master_slaves'' liegen. Die Sensoren in der Datei ''/sys/bus/w1/devices/w1_bus_master'''2'''/w1_master_slaves'' werden ignoriert.
Ich habe versucht die Funktion so umzuschreiben, dass beide Dateien ausgelesen, verarbeitet und deren Inhalt zusammen gefügt wird. Leider habe ich wo einen Fehler, so dass mir node-red eine leere Liste anzeigt ;-(

Weiß leider nicht woran es liegt. Habe auch versucht über readFileSync Fehler bzgl. mit synchroner/asynchroner Programmierung zu vermeiden - aber js ist alles Neuland für mich...
Kann mir hier vllt. jemand weiter helfen?

Hier die Originaldatei, in der die Funktion ''sensors'' umgeschrieben werden muss:

Code:
'use strict';

//
// Get and temperature from connected sensors.
//
// @chamerling
//

var fs = require('fs');

var W1_FILE = '/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves';
var W2_FILE = '/sys/bus/w1/devices/w1_bus_master2/w1_master_slaves';

function parseHexData(data) {
  var arr = data.split(' ');

  if (arr[1].charAt(0) === 'f') {
    var x = parseInt('0xffff' + arr[1].toString() + arr[0].toString(), 16);
    return (-((~x + 1) * 0.0625));
  } else if (arr[1].charAt(0) === '0') {
    return parseInt('0x0000' + arr[1].toString() + arr[0].toString(), 16) * 0.0625;
  }
  throw new Error('Can not parse data');
}

function parseDecimalData(data) {
  var arr = data.split('\n');

  if (arr[0].indexOf('YES') > -1) {
    var output = data.match(/t=(-?(\d+))/);
    return Math.round(output[1] / 100) / 10;
  } else if (arr[0].indexOf('NO') > -1) {
    return false;
  }
  throw new Error('Can not get temperature');
}

var parsers = {
  'hex': parseHexData,
  'decimal': parseDecimalData,
  'default': parseDecimalData
};

function parseData(data, options) {
  var parser = options.parser || 'default';
  if (!parsers[parser]) {
    parser = 'default';
  }
  return parsers[parser](data);
}
module.exports.parseData = parseData;

// Get all connected sensor IDs as array
// @param callback(err, array)
function sensors(callback) {

  fs.readFile(W1_FILE, 'utf8', function(err, data) {
    if (err) {
      return callback(err);
    }

    var parts = data.split('\n');
    parts.pop();
    return callback(null, parts);
  });
}
module.exports.sensors = sensors;

// Get the temperature of a given sensor
// @param sensor : The sensor ID
// @param callback : callback (err, value)
function temperature(sensor, options, callback) {
  if (options instanceof Function) {
    callback = options;
    options = {};
  }

  fs.readFile('/sys/bus/w1/devices/' + sensor + '/w1_slave', 'utf8', function(err, data) {
    if (err) {
      return callback(err);
    }

    try {
      return callback(null, parseData(data, options));
    } catch(e) {
      return callback(new Error('Can not read temperature for sensor ' + sensor));
    }
  });
};
module.exports.temperature = temperature;

function temperatureSync(sensor, options) {
  options = options || {};
  var data = fs.readFileSync('/sys/bus/w1/devices/' + sensor + '/w1_slave', 'utf8');
  return parseData(data, options);
};
module.exports.temperatureSync = temperatureSync;


Folgendes habe ich umgeschrieben:

Code:
var W1_FILE = '/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves';
var W2_FILE = '/sys/bus/w1/devices/w1_bus_master2/w1_master_slaves';
var sensorsW1;
var sensorsW2;
var sensorsAll;

[...........]

// Get all connected sensor IDs as array
// @param callback(err, array)
function sensors(callback) {
  sensorsW1 =  fs.readFileSync(W1_FILE, 'utf8', function(err, data) {
    if (err) {
      return callback(err);
    }

    var parts = data.split('\n');
    parts.pop();
    return parts;
  });

  sensorsW2 =  fs.readFileSync(W2_FILE, 'utf8', function(err, data) {
    if (err) {
      return callback(err);
    }

    var parts = data.split('\n');
    parts.pop();
    return parts;
  });
return callback(null, sensorsW1);
}
module.exports.sensors = sensors;


Danke und liebe Grüße
Leo
Zitieren


Nachrichten in diesem Thema
Anfängerfrage: Funktion umschreiben - von leof.22 - 17.10.2021, 22:40
RE: Anfängerfrage: Funktion umschreiben - von Gast - 21.10.2021, 03:21

Gehe zu:


Benutzer, die gerade dieses Thema anschauen:
1 Gast/Gäste