DS2423 Counter mit Ultraschallsensor am usb9097 pcsensor

Begonnen von Franz Tenbrock, 19 Februar 2014, 19:08:43

Vorheriges Thema - Nächstes Thema

Franz Tenbrock

Hallo
so das Teil ist im Dom der Zisterne eingebaut
und ds beste es kommt auch ein vernünftiger Wert zurück.

So jetzt muss ich das noch loggen und auch mit FHEM rechnen
Hab ich noch nie gemacht.

Die Wasserspeicherkapazität im Dom werde ich vernachlässigen.
Die Formel steht ja oben

Hier erst mal ein Schaubild vom Aufbau:

(http://zisterne.jpg)

ev hilft mir ja wieder jemand. Wie man das dann im Dashboard darstellt das weiß ich ja mittlerweile
Gerade den Fritzboxanrufbeantworter da integriert. :-)
http://forum.fhem.de/index.php/topic,17216.msg144777.html#msg144777


cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Franz Tenbrock

#16
So etwas weiter aber leider noch nicht schlauer
Mathe ist 30 Jahre her.. in meinem Beruf nicht gerade gefragt.

Hab die Zeichnung erweitert, aber das Problem wird das mit dem acuscosinus sein, den fhem wahrschelinlich nciht berechnen kann.
Hab das mal aktuell berechnet und komme auch zu einem glaubhaften Ergebniss.

Ich kann mir schon vorstellen was PAH mit
einer einfachen polynomialen Näherung.
meint.
Das heisst man hat ne Formel ohne diesen arcuscosinus.

Hab aber bei Tante G bisher nichts dazu gefunden...
bis auf diese Peiltabelle
http://www.tankanlagen.com/wp-content/uploads/2010/10/peiltabelle10000liter.pdf


(http://zisterne2.jpg)

8)

Wobei so ganz schlimm ist das nicht, denn ich kann anhand der Füllhöhe schon erkennen was da passiert

Bin aber schon mal froh das das Ganze überhaupt geklappt hat.
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Prof. Dr. Peter Henning

#17
Es schmerzt mich zutiefst, dass man "30 Jahre" als Entschuldigung vorbringt, das bisschen elementare Schulmathematik verlernt zu haben.
Also mit der Aufforderung, sich heftig zu schämen:

Sei x der in m gemessene Abstand zur Wasseroberfläche. Dann ist die Wassermenge im Tank gegeben durch

V (in Kubikmetern) = (Tanklänge in m) * (2.01062 +  0.00274162 Sqrt[x-0.32] * (208.272 - 685.388 x + 104.58 x^2 + 9.89217 x^3 + 1.52889 x^4 +  x^5))

Die Formel gilt, solange der Wasserpegel sich nicht im Dom befindet (dafür müsste man die Maße des Doms kennen), also ab etwa x > 0.4 m und wird etwas ungenauer bei x > 1.6 m

LG

pah

Franz Tenbrock

Sorry
Aber ich beschäftige mich jetzt schon einige Stunden damit.
Ich denke FHEM wird wohl kaum einen Arcuscosinus berechnen können, daher wohl ja auch die polynominale Annäherung

Jetzt habe ich schon eine Hilfestellung bekommen aber lösen kann ich es damit immer noch nicht.

im übrigen fehlt zumindest 1 schließende Klammer, soweit eichen meine Mathekenntnisse ( Sorry  ;) )

Das man über die Fläche * Tasnklänge zum Volumen kommt ist klar.

Die 0,32 ergeben sich aus dem Abstand Sensor zur theoretischen Oberkante des Tanks 192 cm - 160 cm
[ o,88 m - 0,32m ]

SQRT hab ich bei Google nachgesehen ist die Quadratwurzel

was ich noch nicht verstehe ist zB 685,388 x   soll das heissen 685,388 * 0,88

wobei wenn ich von einer kreisberechnung ausgehe und den Dom immer vernachlässige  dann müsste ich doch immer mit 0,56 cm rechnen

Ich grübel gerade mit einem Bekannten darüber.
Ich bin im allgemeinen ja nicht abgeneigt fehlendes Wissen durch Suchen etc zu Vervollständigen, aber so trivial ist das sicher nicht.

Die nächste Hürde mit viel Recherche für mich wird ja sein wie packe ich das dann in FHEM ein
also noch viel grübelei..

gibt es ev einen Link der mich in die Annäherungstheorie einführt ?
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Prof. Dr. Peter Henning

Fehlende Klammer stimmt - ist ergänzt.

Natürlich kann FHEM einen ArcCos rechnen - denn FHEM kann alles, was Perl kann. So ist es aber einfacher einzugeben ...

685.388 x  bedeutet 685.388 MAL x. In Perl code:

V (in Kubikmetern) = (Tanklänge in m) * (2.01062 +  0.00274162 *sqrt(x-0.32) * (208.272 - x*( 685.388  - x*(104.58 + x*( 9.89217 + x*(1.52889 + x)))))

pah

Franz Tenbrock

Thanks..

dann will ich mal sehen wie ich das eingebaut bekomme, auch da fehlt mir noch ein wenig Wissen
was Perl kann oder nicht ??
da muss ich noch viel lernen.


Als erstes brauche ich da wohl mal ein Logfile mit den richtigen Readings.
das wird dann erst einmal die nächste Aufgabe sein.



und dann werde ich mal weitersehen
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Joachim

Zitat
dann will ich mal sehen wie ich das eingebaut bekomme,
--> userReadings
attr <mein Sensor> userReadings Volumen { (Tanklänge in m) * (2.01062 +  0.00274162 *sqrt(("<mein Sensor>","höhe",0)-0.32) * (208.272 - ("<mein Sensor>","höhe",0)*( 685.388  - ("<mein Sensor>","höhe",0)*(104.58 + ("<mein Sensor>","höhe",0)*( 9.89217 + ("<mein Sensor>","höhe",0)*(1.52889 + ("<mein Sensor>","höhe",0)))))) }

mal so aus der Hüfte, ohne Garantie

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Franz Tenbrock

da sind einfach noch zu viele Dinge von denen ich noch keine Ahnung habe
aber bisher habe ich die anderen Dinge nach mehr oder weniger langer zeit und entsprechender Unterstützung auch hinbekommen.

also das ist mein Code der aber leider noch nicht das macht was ich will

define Zisterne OWCOUNT DS2423 A2D993000002 600
attr Zisterne BUnit cm
attr Zisterne IODev USB9097
attr Zisterne model DS2423emu
attr Zisterne nomemory 1
attr Zisterne room OWX
attr Zisterne userReadings wasserstand:counters.B {ReadingsVal("wasserstand","counters.B,0")}

define FileLog_Zisterne FileLog ./log/Zisterne-%Y.log Zisterne|B:*
attr FileLog_Zisterne logtype text
attr FileLog_Zisterne room OWX


define SVG_FileLog_Zisterne_1 SVG FileLog_Zisterne:SVG_FileLog_Zisterne_1:CURRENT
attr SVG_FileLog_Zisterne_1 room OWX


fangen wir oben an

attr Zisterne BUnit cm

im Wiki habe ich gelesen, dass man damit eine Einheit für Unit B angeben kann, dachte ich zumindest
klappt leider so nicht, kommt aber auch keine Fehlermeldung

dann hatte ich versucht die Formel einzugeben, klappt so noch nicht, war irgendwie klar, einfahc noch zu hoch für mich.


dann habe ich mal versucht ein userReadings zu definieren
klappt so natürlich auch noch nicht da
get Zisterne counters
das hier bringt

OWCOUNT: Zisterne.counters => A: 3754.0 cts A_rate: 600.00 cts/h B: 90.0 B_rate: 0.00 /h

Ich brauche aber nur das hier
B: 90.0

(http://zisterne4.jpg)

Muss ich die Readings
Wasserstand und Volumen in der FHEM.save löschen oder geht das auch irgendwie leichter -   bestimmt  :(

Hab im Wiki und in der command ref gelesen, komme damit aber einfach noch nicht weiter
bevor ich also so eine komplexe Formel berechne scheint es mir sinnvoller erst mal ne ganz einfach Berechnung zu machen
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Franz Tenbrock

#23
ein Problem hab ich mit der commandref dann gelöst
mit diesem Kommando verschwindet das nicht benötigte reaing :-)
lesen hilft halt

deletereading Zisterne Wasserstand

:)

und mit dieser Zeile

attr Zisterne BOffset -32

bekomme ich H gleich richtig gesetzt, also 56 cm ( Wasser sind schon raus )

32 wr ja die Höhe vom Ultraschallsensor bis oberkante des Wassertanks ohne Dom

wenn ich jetzt 160 cm was ja mein Durchmesser vom Wassertank ist minus 56 cm nehme
dann hätte ich zumindest den aktuellen Wasserstand im Tank
das ist der Wert den mir auch meine manuelle Tankanzeige anzeigt.
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Franz Tenbrock

so und noch was weiter
8)


OWCOUNT: Zisterne.counters => A: 4585.0 cts A_rate: 600.00 cts/h USensor: 58.0 cm USensor_rate: 0.00 cm0/h

lesen  hilft doch ..  was rot ist hab ich heute abend geschafft in dem ich mir nühsam die INfos zusammengesucht habe, mit dem Verständnis für die Syntax hapert es zwar noch aber soweit hab ich es verstanden
für den nächsten schritt Berechnung der Wasserhöhe im Tank wäre Hilfe schön..

als 16o cm minus USensor
160 - 58
wobei 160 fester Wert und 58 = USensor variabel

so jetzt Feierabend.

define Zisterne OWCOUNT DS2423 A2D993000002 600
[color=red]attr Zisterne BName USensor[/color]
[color=red]attr Zisterne BOffset -32[/color]
[color=red]attr Zisterne BUnit cm|cm[/color]
attr Zisterne IODev USB9097
attr Zisterne model DS2423emu
attr Zisterne nomemory 1
attr Zisterne room OWX
attr Zisterne userReadings wasserstand:counters.B {ReadingsVal("wasserstand","counters.B,0")}
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Franz Tenbrock

Dann will ich mal schauen ob ich heute Abend mit diesme Link

http://de.selfhtml.org/perl/sprache/operatoren.htm
weiterkomme.

Die deutlich verbesserte Einsteiger PDF hab ich noch mal gelesen, leider aber zum Rechnen mit FHEM / Perl nichts brauchbares gefunden.
Also werde ich mich doch mit den Grundlagen von Perl auseinanderzusetzen haben.

Da mein Schulter leider vom Skifahren etwas lädiert ist muss der Garten dann halt noch was warten.
Ist ja scheinbar auch ein dickes Brett an das ich mich als Anfänger gewagt habe.
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Franz Tenbrock

Ich scheiter im Moment noch ein individuelles Log zu machen,
hab mal wieder viel gelesen aber irgendwas stimmt noch nicht


define Zisterne OWCOUNT DS2423 A2D993000002 600
attr Zisterne BName USensor
attr Zisterne BOffset -32
attr Zisterne BUnit cm|cm
attr Zisterne IODev USB9097
attr Zisterne model DS2423emu
attr Zisterne nomemory 1
attr Zisterne room OWX

define FileLog_Zisterne FileLog ./log/Zisterne-%Y.log Zisterne|B:*

define FileLog_wasserstand FileLog ./log/wasserstand-%Y.log wasserstand|USensor:.*(USensor).*


Beim 2. Filelog will ich eigentlich nur folgendes stehen haben

2014-03-04_12:20:26  USensor:  58.0 cm

der Rest interessiert ja nicht, warum also loggen.

Irgendwie brauche ich ja USensor als Variable um damit dann im nächsten Schritt zu rechnen.
sehe in der command ref etc den Wald irgendwie vor Bäumen nicht. Auch aus anderen Beispielen hier im Forum hab ich wohl das entscheidende übersehen

cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Franz Tenbrock

#27
Hilf dir selbst ...
so ein Problem hab ich nun ganz anders gelöst als gedacht.


define Zisterne OWCOUNT DS2423 A2D993000002 600
attr Zisterne BName USensor
attr Zisterne BOffset -32
attr Zisterne BUnit cm|cm
attr Zisterne IODev USB9097
attr Zisterne model DS2423emu
attr Zisterne nomemory 1
attr Zisterne room OWX

define Wasserstand readingsProxy Zisterne:USensor
attr Wasserstand room OWX

define FileLog_Wasserstand FileLog ./log/Wasserstand-%Y.log Wasserstand


in der commandref habe ich denBefehl
readingsProxy
gefunden, hab ich bisher in keinem Beispiel gefunden, fand ich aber ganz elegant.
mal sehen ob ich damit auch meine EM1000GZ endl

ich so hinbekomme wie ich das möchte ??

und damit kann ich dann mein Log so schreiben wie gewollt, ob ich dann damit rechnen kann, mal sehen..

so sieht die Zeile im Log aus.

2014-03-04_13:31:13 Wasserstand 58
2014-03-04_13:33:03 Wasserstand 58
2014-03-04_13:33:06 Wasserstand 58


jetzt sollte ich wenn die Readings immer gleich sind, weil ja nciht Wasser in Massen verbraucht wird die Logs noch reduzieren
aber auch da fehlt mir wieder etwas Syntax , also lesen...

attr Wasserstand event-on-change-reading  ???????

das ist der Perl Code der mir zumindest die aktuelle Füllhöhe, leider noch mit negativem Vorzeichen ausgibt
wenn ich das in der Kommandozeile eingeben, der Code ist somit richtig, das muss nun oben in die Definition rein, da hapert es noch

{ ReadingsVal("Zisterne", "USensor", "160")-160 }



so jetzt kasper ich schon wieder rum
jetzt kann ich zwar schon was rechnen aber FHAM versteht es noch nciht,, Syntax??

define Wasserspiegel dummy
set Wasserspiegel { ReadingsVal("Zisterne", "USensor", "160")-160 }
attr Wasserspiegel room OWX
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Franz Tenbrock

Zwischenstand :) :D

mit diesem Code

#######################################################################################
####                          Zisterne                                             ####
####   http://forum.fhem.de/index.php?action=post;topic=20480.0;last_msg=144944    ####
#######################################################################################


define Zisterne OWCOUNT DS2423 A2D993000002 600
attr Zisterne BName USensor
attr Zisterne BOffset -32
attr Zisterne BUnit cm|cm
attr Zisterne IODev USB9097
attr Zisterne model DS2423emu
attr Zisterne nomemory 1
attr Zisterne room OWX

define Wasserstand readingsProxy Zisterne:USensor
attr Wasserstand room OWX
define FileLog_Wasserstand FileLog ./log/Wasserstand-%Y.log Wasserstand

attr Wasserstand userReadings Test { ReadingsVal("Zisterne", "USensor", "160")-160 }


bin ich schon mal ein wenig weiter.
So sieht es jetzt aus:
(http://wasserspiegel.jpg)

also auch vom Verständnis ein wenig weiter.
geht sicher eleganter,
auch das negative Vorzeichen stört noch was

so sehe ich aber das der Wasserspiegel noch 1,01 hoch ist, also noch mehr als die Hälfte drin ist.

aber gnaz schön mühsam, wenig einfache Beispiele in der command ref und im Anfänger PDF, dort alles immer schon stark verschachtelt, für Profis sicher so ok, aber für Anfänger schwierig da rein zu kommen

cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Franz Tenbrock

doch noch geschafft  ( Teilziel 1 )

;D 8)

(http://zisterne5.jpg)

und das ist der Code
durch die Hintertür ??
#######################################################################################
####                          Zisterne                                             ####
####   http://forum.fhem.de/index.php?action=post;topic=20480.0;last_msg=144944    ####
#######################################################################################


define Zisterne OWCOUNT DS2423 A2D993000002 600
attr Zisterne BName USensor
attr Zisterne BOffset -32
attr Zisterne BUnit cm|cm
attr Zisterne IODev USB9097
attr Zisterne model DS2423emu
attr Zisterne nomemory 1
attr Zisterne room OWX

define Wasserstand readingsProxy Zisterne:USensor
attr Wasserstand group Zisterne
attr Wasserstand room OWX
attr Wasserstand valueFn { ReadingsVal("Zisterne", "USensor", "160")-160 }
define FileLog_Wasserstand FileLog ./log/Wasserstand-%Y.log Wasserstand


Filelog muss geändert werden

und dann noch die Formel von PAH
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi