Seite 8 von 8 ErsteErste 12345678
Ergebnis 106 bis 114 von 114
  1. #106
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.573

    AW: Python to Javascript

    Zitat Zitat von Landix Beitrag anzeigen
    Leider fängt die Tabelle für mein Gerät erst bei 40 RPM an.
    aber es zeigt doch auch die power werte an? das heißt du kannst die ablesen für 20 und 30 rpm.
    deine tabelle geht aber auch nur bis 70! das funde ich ja wenig, ich laufe normal so um die 75. bis 100 sollten die schon gehen.

  2. #107
    Landix ist offline Eroberer
    registriert
    03-05-2017
    Beiträge
    59

    AW: Python to Javascript

    Ich habe die Werte hoch kumuliert, kann mit den minimalen Abweichungen leben

    Ja ich fahre auch mit 70-90 rpm, ist auch besser für die Gelenke.
    Power-Werte zeigt die Software super an.

    Hoch kumuliert sieht die Tabelle jetzt so aus:


    https://github.com/Landixus/ZwiftVir.../SpeedMeter.js


    Hier die Anleitung:
    https://www.instructables.com/id/Usi...itness-Device/

    Mach ich noch mal hübscher, bei mehr Zeit.
    Geändert von Landix (13-05-2017 um 13:07 Uhr)

  3. #108
    Landix ist offline Eroberer
    registriert
    03-05-2017
    Beiträge
    59

    Question AW: Python to Javascript

    Ich hätte da gerne mal noch ein Problem

    Ich bekomme zwischendurch einen Fehler im Poweroutput:

    Code:
    Event: 218       Power: NaNw     Cadence: 134rpm
    Event: 219       Power: NaNw     Cadence: 134rpm
    Event: 220       Power: NaNw     Cadence: 134rpm
    Event: 221       Power: NaNw     Cadence: 134rpm
    Eigentlich nicht schlimm dachte ich weil danach gehts ja weiter:
    Code:
    Event: 222       Power: 69w      Cadence: 70rpm
    Event: 223       Power: 69w      Cadence: 70rpm
    Event: 224       Power: NaNw     Cadence: 142rpm
    Event: 225       Power: NaNw     Cadence: 142rpm
    Event: 226       Power: NaNw     Cadence: 142rpm
    Event: 227       Power: NaNw     Cadence: 142rpm
    Event: 228       Power: NaNw     Cadence: 142rpm
    Event: 229       Power: 28w      Cadence: 42rpm
    Event: 230       Power: 28w      Cadence: 42rpm
    Event: 231       Power: 28w      Cadence: 42rpm
    Event: 232       Power: 28w      Cadence: 42rpm
    Event: 233       Power: 28w      Cadence: 42rpm
    Leider bringt das NaNw den ANT Stick aus dem Tritt und die Anzeige der Wattleistung friert bei zwift ein... Bei 280W ist das schon toll, aber ja nicht Sinn der Sache.

    Ich finde nirgends ein NaNw, somit weiss leider nicht wie ich das weg bekomme, ich würde das NaNw gerne durch eine 0 ersetzen, da dieser Fehler nicht ständig auftritt.

    Ich habe hier noch mal meinen Code, den ich mit dem Powermeter zusamme geführt habe:

    Code:
    var Ant = require('ant-plus');
    
    var PowerMeter = function() {
      var stick = new Ant.GarminStick3;
      var channel = 1;
      if (!stick.is_present()) {
        stick = new Ant.GarminStick2;
      }
    
      stick.on('startup', function () {
        console.log('startup');
        console.log('Max channels:', stick.maxChannels);
        // 0xCAFFEDOOD
        var deviceId = 0xBEEF;
        stick.write(Ant.Messages.assignChannel(channel, 'transmit'));
        // The device type shall be set to 11 (0x0B) when searching to pair to an ANT+ bike power sensor
        // The transmitting sensor contains a 16-bit number that uniquely identifies its
        // transmissions. Set the Device Number parameter to zero to allow wildcard
        // matching. Once the device number is learned, the receiving device should
        // remember the number for future searches.
        // Device number set to 1 here
        stick.write(Ant.Messages.setDevice(channel, deviceId, 11, 1));
        // RF Channel 57 (2457 MHz) is used for the ANT+ bike power sensor.
        stick.write(Ant.Messages.setFrequency(channel, 57));
        // Channel period Data is transmitted from most bike power sensors every 8182/32768 seconds
        // (approximately 4.00 Hz). This channel period shall be used by default.
        stick.write(Ant.Messages.setPeriod(channel, 4096)); //8192 16384 2370
        stick.write(Ant.Messages.openChannel(channel));
        console.log('cycling power meter initialized');
      });
    
      stick.on('shutdown', function () { console.log('ANT+ shutdown'); });
    
      if (!stick.open()) {
      	console.log('ANT+ USB stick not found!');
      }
    
      this.stick = stick;
      this.channel = channel;
      this.power_event_count = 0;
      this.power_accumulated = 0;
    
    };
    
    PowerMeter.prototype.broadcast = function(power, cadence) { //, cadence
      if (!this.stick.is_present()) {
        return;
      }
    
      var data = [];
      data.push(this.channel);
      data.push(0x10); // power only
      this.power_event_count++;
      this.power_event_count = this.power_event_count % 254; // rollover 255
      data.push(this.power_event_count);
      data.push(0xFF); // pedal power not-used
      data.push(cadence); // cadence
      this.power_accumulated += power;
      this.power_accumulated = this.power_accumulated % 65534; //65535
      console.log("Event: %s \t Power: %sw \t Cadence: %srpm", this.power_event_count, power, cadence); //, cadence
    
      data = data.concat(Ant.Messages.intToLEHexArray(this.power_accumulated, 2));
      data = data.concat(Ant.Messages.intToLEHexArray(power, 2));
      this.stick.write(Ant.Messages.buildMessage(data, 0x4E)); //ANT_BROADCAST_DATA
    };
    module.exports.PowerMeter = PowerMeter;
    
    var SpeedMeter = function (SensorPin, levelUpPin, levelDownPin, weighting, pulsesPerRev, timeOut, bounceTime, bounceTimeL) {
        var rpm = 0;
        var level = 1;
        var timeAct = 0;
        var timeOld = 0;
        var timeDiff = 0;
        var timeLevel = 0;
        var watchdog = null;
        var gpio = require('rpi-gpio');
        var power = [
          [8, 16, 25, 38, 50, 69, 88, 103, 120, 138, 152],
          [11, 22, 34, 51, 69, 91, 113, 131, 154, 178, 192],
          [12, 24, 42, 64, 88, 114, 145, 175, 202, 238, 254],
          [15, 31, 51, 77, 107, 140, 170, 206, 236, 280, 294],
          [19, 38, 60, 91, 126, 163, 203, 243, 283, 327, 367],
          [20, 40, 69, 105, 145, 188, 228, 273, 319, 362, 409],
          [22, 48, 79, 119, 164, 214, 260, 310, 360, 400, 458],
          [24, 53, 88, 133, 183, 237, 286, 350, 406, 447, 518],
          [28, 57, 97, 146, 202, 263, 318, 389, 449, 494, 585],
          [30, 64, 106, 160, 221, 289, 337, 415, 476, 518, 620],
          [32, 68, 115, 174, 240, 312, 351, 435, 499, 544, 655],
          [33, 72, 123, 186, 259, 338, 293, 483, 550, 596, 712],
          [37, 79, 133, 200, 278, 361, 427, 527, 592, 652, 783],
          [40, 87, 142, 215, 297, 387, 462, 571, 636, 709, 832],
          [42, 91, 151, 228, 316, 409, 485, 599, 669, 744, 864],
          [44, 95, 160, 242, 335, 436, 515, 633, 708, 787, 905]
        ];
    
    
        weighting = weighting || 0;
        pulsesPerRev = pulsesPerRev || 1;
        timeOut = timeOut || 10000;
        bounceTime = bounceTime || 150;
        bounceTimeL = bounceTimeL || 150;
        gpio.on('change', function (channel, value) {
            if (channel == SensorPin) {
                var timeAct = new Date();
                if ((timeAct - timeOld) > bounceTime) {
                    if (watchdog) {
                        clearTimeout(watchdog);
                    }
                    if (timeOld) {
                        timeDiff *= weighting;
                        timeDiff += (1 - weighting) * (timeAct - timeOld);
                        rpm = 60000 / (timeDiff * pulsesPerRev);
                    }
                    timeOld = timeAct;
                    watchdog = setTimeout(function () {
                        timeOld = 0;
                        rpm = 0;
                    }, timeOut);
                }
            }
            else if (channel == levelUpPin) {
                var timeLevelUp = new Date();
                if ((timeLevelUp - timeLevel) > bounceTimeL) {
                    if (level < 16) {
                        ++level;
                    }
                    timeLevel = timeLevelUp;
                }
            }
            else if (channel == levelDownPin) {
                var timeLevelDown = new Date();
                if ((timeLevelDown - timeLevel) > bounceTimeL) {
                    if (level > 1) {
                        --level;
                    }
                    timeLevel = timeLevelDown;
                }
            }
        });
    
        gpio.setup(SensorPin, gpio.DIR_IN, gpio.EDGE_RISING);
        gpio.setup(levelUpPin, gpio.DIR_IN, gpio.EDGE_RISING);
        gpio.setup(levelDownPin, gpio.DIR_IN, gpio.EDGE_RISING);
    
        this.getSpeed = function () {
            return rpm;
        };
        this.getLevel = function () {
            return level;
        };
        this.getPower = function () {
            var lowerVal = 0;
            var upperVal = 0;
            var idxLower = Math.floor(rpm / 10);
            var idxUpper = Math.ceil(rpm / 10);
            if (idxLower > 1) {
                lowerVal = power[level - 1][idxLower - 2];
            }
            else {
                idxLower = 0;
            }
            if (idxUpper > 1 && idxUpper <= 12) //12
            {
                upperVal = power[level - 1][idxUpper - 2];
            }
            else if (idxUpper > 12) //12
            {
                console.log("RPM(", rpm, ") out of range");
                return power[level - 1][10];
            }
            else if (idxUpper <= 1) {
                idxUpper = 0;
            }
            if (idxUpper == 0 && idxLower == 0) {
                return 0;
            }
            return (upperVal - lowerVal) / (idxUpper * 10 - idxLower * 10) * (rpm - idxLower * 10) + lowerVal;
        };
    };
    
    module.exports.SpeedMeter = SpeedMeter;
    idx upper ist 12, muss das vielleicht 11 sein?

    Mit 11 "scheint es zu klappen" ich beobachte das mal.
    Aber kann man so einen NaNw Fehler abfangen wenn er auftritt?
    Geändert von Landix (09-06-2017 um 17:55 Uhr)

  4. #109
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.545

    AW: Python to Javascript

    NaN bedeutet Not a Number und kommt vor, wenn du irgendeine "Rechen"-Operation durchführst, die nicht zu einer Zahl führt.

    Zitat Zitat von Landix Beitrag anzeigen
    idx upper ist 12, muss das vielleicht 11 sein?
    12 sieht jetzt OK aus... aber du musst das auch bei idxLower überprüfen.

  5. #110
    Landix ist offline Eroberer
    registriert
    03-05-2017
    Beiträge
    59

    AW: Python to Javascript

    Hmmm...

    Kann ich nicht einfach sagen das NaN = 0 ist?

    Ich kann das coding technisch ja nicht, aber würde das nicht so gehen?
    Ich denke das eine Teilung durch 0 statt findet, dann kommt das NaN.

    Oder noch einfacher idxLower auf 1?


    Verstehen würde ich das trotzdem nicht da idxLower doch mit == 0 hart gesetzt ist!?

    Hab jetzt auch eingekreist das es immer bei 50 RPM passiert.

    kann ich das NaN denn vor dem output abholen ohne in das große Script einzugreifen?

    Code:
    var SpeedMeter = require('./power-meter');
    var power_meter = require('./power-meter');
    var pm = new power_meter.PowerMeter();
    var speedmeter = new power_meter.SpeedMeter(7, 16, 18);
    
    
    function a() {
      var power_instant = Math.round(speedmeter.getPower());
      var cadence = Math.round(speedmeter.getSpeed());
      pm.broadcast(power_instant, cadence); //, cadence
    
    
    //  console.log("level: ", speedmeter.getLevel(), " speed: ", speedmeter.getSpeed(0), " power: ", speedmeter.getPower());
      setTimeout(a, 249); //249
    }
    
    
    a();
    power_instant = isNaN(power_instant)?0: power_instant; // so ?

    Scheint zu funktionieren, verstehe ich zwar immer noch nicht, aber naja, wenns funzt

    Code:
    Event: 171       Power: 0w       Cadence: 50rpm
    Event: 172       Power: 0w       Cadence: 50rpm
    Event: 173       Power: 0w       Cadence: 50rpm
    Event: 174       Power: 0w       Cadence: 50rpm
    Event: 175       Power: 0w       Cadence: 50rpm
    Geändert von Landix (10-06-2017 um 11:21 Uhr)

  6. #111
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.545

    AW: Python to Javascript

    Zitat Zitat von Landix Beitrag anzeigen
    Ich denke das eine Teilung durch 0 statt findet, dann kommt das NaN.
    Nein, die würde Infinity liefern. Ich denke, dass du da irgendwo auf einen nicht existierenden Index zugreifst und dann undefined irgendwo drin hast.
    Zitat Zitat von Landix Beitrag anzeigen
    Verstehen würde ich das trotzdem nicht da idxLower doch mit == 0 hart gesetzt ist!?
    Wo machst du das?

    Ich denke, du musst auch idxLower mit 12 vergleichen:
    Code:
            if (idxLower > 1 && idxLower <= 12) {
                lowerVal = power[level - 1][idxLower - 2];
            }
            else {

  7. #112
    Landix ist offline Eroberer
    registriert
    03-05-2017
    Beiträge
    59

    AW: Python to Javascript

    Zitat Zitat von kkapsner Beitrag anzeigen
    Nein, die würde Infinity liefern. Ich denke, dass du da irgendwo auf einen nicht existierenden Index zugreifst und dann undefined irgendwo drin hast.
    Danke bau ich für das nächste Rennen mit ein!
    Geändert von mikdoe (13-06-2017 um 13:08 Uhr) Grund: fullquote gekürzt

  8. #113
    Landix ist offline Eroberer
    registriert
    03-05-2017
    Beiträge
    59

    AW: Python to Javascript

    24 Km keine Fehler! Super! Danke.

  9. #114
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.545

    AW: Python to Javascript

    Zitat Zitat von Landix Beitrag anzeigen
    24 Km keine Fehler!
    Wunderbar.
    Zitat Zitat von Landix Beitrag anzeigen
    Danke.
    Bitte - gern geschehen.

Seite 8 von 8 ErsteErste 12345678

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 10-12-2016, 09:56
  2. Antworten: 0
    Letzter Beitrag: 07-09-2016, 12:38
  3. Python-Variable in Javascript verwenden
    Von siggi1147 im Forum JavaScript
    Antworten: 2
    Letzter Beitrag: 24-04-2008, 18:34
  4. [Python]Was ist das?
    Von Kriegr im Forum Serverseitige Programmierung
    Antworten: 2
    Letzter Beitrag: 20-05-2003, 16:11
  5. python website
    Von python im Forum Site-Check
    Antworten: 7
    Letzter Beitrag: 14-02-2003, 16:30

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •