Füllstandsensor mit Druck- statt US-Sensor

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

papa
Beiträge: 292
Registriert: 22.05.2018, 10:23

Re: Füllstandsensor mit Druck- statt US-Sensor

Beitrag von papa » 13.03.2019, 13:23

DocMarten hat geschrieben:
13.03.2019, 12:31
Wahrscheinlich muss ich auch Papas Modul anpassen?
Ja
Anfragen zur AskSin++ werden nur im Forum beantwortet

DocMarten
Beiträge: 121
Registriert: 12.11.2006, 23:33

Re: Füllstandsensor mit Druck- statt US-Sensor

Beitrag von DocMarten » 13.03.2019, 19:04

Guten Abend,

Code: Alles auswählen

+Pressure  (#1) Analogwert: 256
18:44:31.491 -> +Pressure  (#1)       Fuellstand in Prozent: 25.7033367156
18:44:31.491 -> +Pressure  (#1)       Fuellstand in Litern: 2161.3728027343
18:44:31.491 -> +Pressure  (#1)       Messung: 6.6828675270
18:44:31.491 -> +Pressure  (#1)       sens_val: 256
18:44:31.491 -> +Pressure  (#1)       ContentTotal: 8.4089193344
18:44:31.491 -> +Pressure  (#1)       Pressure: 2161
18:44:31.491 -> XXX 2161
<- 0E 0E 84 53 E90101 424242 00 C1 01 08 71  - 15953
ignore 0C 7C 84 70 36716C 000000 00 CA 2D  - 15968
ignore 0D D8 A6 10 24E2F3 424242 06 01 C8 00  - 15980
ignore 0A D8 80 02 424242 24E2F3 00  - 15988
ignore 0C C3 84 70 3679E4 000000 00 BF 25  - 15998
ignore 0F 84 86 10 38E037 000000 0A 78 B7 0B 00 00  - 16027
ignore 0C 9F 86 5A 391C84 000000 78 B7 26  - 16091
ignore 0F 07 86 10 38EE12 000000 0A 78 CA 0C 00 00  - 16111
ignore 0F A3 86 10 38E057 000000 0A 50 86 0F 00 40  - 16146
ignore 0C 9F 84 70 391C84 000000 00 B7 26  - 16171
Also alles gut soweit. Gottseidank kam mir dann mit letzter Kraft und ohne fremde Hilfe ;) die Einsicht, dass ich mir (erstmals) die HMConfig_AskSinPPCustom.pm anschauen sollte. Und in der Tat: Dort wurde der Wert durch 100 geteilt, s. auskommentierte Zeilen:

Code: Alles auswählen

     my @unpacked = map{hex($_)} unpack("A2A4",$values);
      # push @evtEt,[$chnHash,1,"pressure:".$unpacked[1]/100];
      push @evtEt,[$chnHash,1,"pressure:".$unpacked[1]];
      # push @evtEt,[$chnHash,1,"state:".$unpacked[1]/100];
      push @evtEt,[$chnHash,1,"state:".$unpacked[1]];
Damit bekomme ich jetzt in fhem die korrekten Liter - und kann somit (versteht das durchaus als Drohung) dazu übergehen, das Modul weiter zu modifizieren. Bereits 2079, also lange vor der Fertigstellung des BER, könnte ich damit fertig sein...
Vielen Dank für Euren tollen Support & einen schönen Abend
Martin

jp112sdl
Beiträge: 2715
Registriert: 20.11.2016, 20:01
Kontaktdaten:

Re: Füllstandsensor mit Druck- statt US-Sensor

Beitrag von jp112sdl » 13.03.2019, 19:06

DocMarten hat geschrieben:
13.03.2019, 19:04
Dort wurde der Wert durch 100 geteilt, s. auskommentierte Zeilen:
Anders wäre die Übertragung eines Wertes mit 2 Dezimalstellen auch nicht möglich.

VG,
Jérôme

DocMarten
Beiträge: 121
Registriert: 12.11.2006, 23:33

Re: Füllstandsensor mit Druck- statt US-Sensor

Beitrag von DocMarten » 13.03.2019, 19:14

Ich will nicht sagen, dass ich das auf Anhieb verstehe, aber ich habe mir schon gedacht, dass dies nicht Bug, sondern Feature war. Ist ja schließlich auf einen ganz anderen Wertebereich ausgelegt gewesen.

mws
Beiträge: 595
Registriert: 02.06.2011, 23:36

Re: Füllstandsensor mit Druck- statt US-Sensor

Beitrag von mws » 14.03.2019, 13:59

Naja du überträgst ein INT in der Form 12345. Das repräsentiert die Zahl 123,45.
Damit das richtig angezeigt wird teilst Du 12345 durch 100 und bekommst 123,45 :)
Wer Rechtschreibfehler findet darf sie behalten.
----------------o00o----'(_)'----o00o---------------

DocMarten
Beiträge: 121
Registriert: 12.11.2006, 23:33

Re: Füllstandsensor mit Druck- statt US-Sensor

Beitrag von DocMarten » 14.03.2019, 16:01

ah ja, jetzt... Muss mich erst noch dran gewöhnen, dass die Wege hier manchmal nicht so sind, wie man es sich als Nicht-Programmierer vorstellen würde. Ich hätte erwartet, dass wenn der Wert 123,45 ist, auch 123,45 im Telegramm übertragen wird...

jp112sdl
Beiträge: 2715
Registriert: 20.11.2016, 20:01
Kontaktdaten:

Re: Füllstandsensor mit Druck- statt US-Sensor

Beitrag von jp112sdl » 14.03.2019, 16:09

Die Telegramm-Payload besteht aus einzelnen Bytes.
Ein Byte kann Werte von 0 - 255 (00000000 - 11111111) annehmen.
Ein Byte kann nicht 28,3 sein. :wink:

Und ist ein zu übertragener Wert > 255, wird er in mehrere Bytes aufgeteilt...

VG,
Jérôme

DocMarten
Beiträge: 121
Registriert: 12.11.2006, 23:33

Re: Füllstandsensor mit Druck- statt US-Sensor

Beitrag von DocMarten » 14.03.2019, 16:38

Danke! Mit Euren Erklärungen bekommt das alles seine Logik.
Und ist ein zu übertragener Wert > 255, wird er in mehrere Bytes aufgeteilt...
Daher das & 0xff; ?

jp112sdl
Beiträge: 2715
Registriert: 20.11.2016, 20:01
Kontaktdaten:

Re: Füllstandsensor mit Druck- statt US-Sensor

Beitrag von jp112sdl » 14.03.2019, 17:06

DocMarten hat geschrieben:
14.03.2019, 16:38
Daher das & 0xff; ?
Das & 0xff liefert von einem Wert der größer als 8 Bit (1 Byte) ist, die 8 Bits ganz rechts.

Beispiel
dezimal 487 = binär 00000001 11100111
:arrow: 487 & 0xff = 11100111

VG,
Jérôme

DocMarten
Beiträge: 121
Registriert: 12.11.2006, 23:33

Re: Füllstandsensor mit Druck- statt US-Sensor

Beitrag von DocMarten » 14.03.2019, 17:31

Danke. Das bringt mich der Lösung eines der größten Menschheitsrätsel etwas näher, nämlich das des bitweisen Verschiebens. Aber so ganz habe ichs noch nicht:

Ich will den Wert pressure = 1234 (10011010010) im Telegramm versenden:

pload[1] = (pressure >> 8) & 0xff;

heisst also, dass zunächst der Wert von pressure um 8 bit nach rechts verschoben wird:

(1234 >> 8) macht aus 0000010011010010 0000000000000100
& 0xff
wäre dann 00000100 , also dezimal 4?
Was bringt mir das?

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“