Moin Leute, wie kann ich anstellen, das ich das Ergebnis von "sensor: - platform: pulse_counter" das als Ergebnis einen Wertebereich von 0 - 6000 hat (als FLOAT) in einen Wertebereich von 0 - 100 (als INT) bekomme? Plattform ist wie geschrieben ESPHOME
:
Bearbeitet durch User
Thomas G. schrieb: > einen Wertebereich von 0 - 6000 hat (als FLOAT) Wieso soll das float sein? Dann müsste es 0.0 - 6000.0 heißen. Das sind natürliche Zahlen und damit Int, genauer unsigned Int.
Rainer W. schrieb: > Wieso soll das float sein? Weil die Variable so deklariert wurde vielleicht! Rainer W. schrieb: > Dann müsste es 0.0 - 6000.0 heißen. Nein! Thomas G. schrieb: > wie kann ich anstellen Was hast Du denn schon probiert? Gruss Chregu
Mit einem filter zB:
1 | filters: |
2 | - multiply: 0.016666 |
https://esphome.io/components/sensor/index.html#multiply Oder mit einer lambda kannst Du Dir das Ergebnis umformen wie Du willst. https://esphome.io/components/sensor/index.html#lambda Ist dann noch float - könntest Du in der Darstellung machen oder - siehe lambda. Kommt drauf an, wie es weitergehen soll...
:
Bearbeitet durch User
Christian M. schrieb: > Rainer W. schrieb: >> Wieso soll das float sein? > > Weil die Variable so deklariert wurde vielleicht! Dann kann man das auch bei den Konstanten deulich hinschreiben. Das hat etwas mit Stil zu tun. > Rainer W. schrieb: >> Dann müsste es 0.0 - 6000.0 heißen. > > Nein! lambda¶ ... filters: - lambda: return x * (9.0/5.0) + 32.0; Make sure to add .0 to all values in the lambda, otherwise divisions of integers will result in integers (not floating point values).
:
Bearbeitet durch User
Das brachte dann die Lösung: globals: - id: rpm type: int restore_value: no initial_value: '1' sensor: - platform: pulse_counter pin: number: D8 unit_of_measurement: 'RPM' accuracy_decimals: 0 id: _speed name: FanSpeed update_interval: 1s filters: - lambda: return (x / 2); fan: - platform: speed id: fanid # .state .speed name: fan output: fan_speed lambda: |- id(rpm) = id(_speed).state; ... it.printf(55,22, id(font1), "%u rpm", id(rpm)); // rpm
Thomas G. schrieb:
1 | > lambda: |- |
2 | > id(rpm) = id(_speed).state; |
3 | > ... |
4 | > it.printf(55,22, id(font1), "%u rpm", id(rpm)); // rpm |
Kannst Dir vermutlich (ungetestet) die globals-Definition sparen und statt dessen direkt ein int anlegen:
1 | int rpm = id(_speed); |
2 | ... |
3 | it.printf(55,22, id(font1), "%u rpm", rpm); |
Kann ich mir vermutlich insgesamt sparen, da die Graph-Funktion anscheinend keine Variablen akzeptiert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.