Hallo zusamman,
Ich habe ermittel mit einem Ultraschallsensor die Höhe des Wasserspiegels in meiner Zisterne. (Einfacher Zylinder)
Jetzt würde ich gerne den Füllstand in Litern errechnen, allerdings komme ich nicht mit ValueFn zurecht.
Die Beispiele im Forum belaufen sich alle auf komplizierte Behälterformen.
Ich muss ja lediglich diese Formel nutzen V=pi*r²*h
.
Kann mir mal jemand unter die Arme greifen?
Gruß Dirk
Stichwort userreadings ;)
Sorry, aber damit ist nichts anzufangen.
https://fhem.de/commandref_DE.html#userReadings
Zitat von: amenomade am 19 März 2019, 17:40:01
https://fhem.de/commandref_DE.html#userReadings
Mist, du warst schneller.
PS: Wir wollen dir helfen, aber du erwartest eine fertige Lösung und keine Hilfe.
Und das ohne alle Infos zu geben.
Sorry, das habt ihr falsch verstanden.
Wenn ich es über das attr userReading lösen wollte, müsste der Syntax meiner Meinung nach so aussehen:
attr Wasserstand userReadings Volumen {ReadingsVal("Wasserstand","state",0)*1130400 ." L"}
Dann kommt aber beim Reading Volumen folgender Fehlercode.
Error evaluating Wasserstand userReading Volumen: Not enough arguments for main::ReadingsVal at (eval 665986) line 1, near "))"
Mach mal ein "list Wasserstand" bitte
Internals:
CFGFN
DEF Zisterne:usensor
DEVICE Zisterne
FUUID 5c90fde1-f33f-000f-b2c8-364670972b1083de
NAME Wasserstand
NOTIFYDEV global,Zisterne
NR 245807
NTFY_ORDER 50-Wasserstand
READING usensor
STATE 153
TYPE readingsProxy
CONTENT:
Zisterne 1
READINGS:
2019-03-19 17:25:28 Volumen Error evaluating Wasserstand userReading Volumen: Not enough arguments for main::ReadingsVal at (eval 665986) line 1, near "))"
2019-03-19 17:25:28 state 153
Attributes:
group Zisterne
room MQTT-Devices
userReadings Volumen {ReadingsVal("Wasserstand","state",0)*1130400 ." L"}
valueFn { (-1*(ReadingsVal("Zisterne","usensor", "180")-180)) }
Was soll valueFn hier machen?
Eigentlich egal, so lange "state" immer einen numerischen Wert hat.
Bei mir funktioniert das userReading wie Du es geschrieben hast.
Ich möchte das Volumen gerne in Litern angezeigt bekommen.
In diesem Beispiel ist der Code für eine ganz komplizierte Behäterform, die habe ich aber nicht, bin aber auch leider nicht in der Lage, diese auf meine Bedürfnisse anzupassen.
attr Tankinhalt valueFn { int((0.5*(20106-((6400*(acos(1-((ReadingsVal("Zisterne","USensor", "160")+0)/80)))-(sqrt(160*(ReadingsVal("Zisterne", "USensor", "160")+0)-((ReadingsVal("Zisterne", "USensor", "160")+0)**2))*(80-(ReadingsVal("Zisterne", "USensor", "160")+0)))))))) }
Heisst das Reading USensor oder usensor?
usensor
Hab ich aber auch schon getestet.
Also gib bitte noch dazu ein "list Zisterne"
Ich würde nicht userReadings und valueFn mischen. Insb. wenn jede mit seinen eigene "default" Werte arbeitet.
Der Syntaxfehler im userReading verstehe ich aber nicht.
Warum nicht einfach ein userReading direkt auf Zisterne, ohne den Umweg über readingsProxy?
Internals:
CFGFN
FUUID 5c90fe99-f33f-000f-9b22-c79f9993b4862b52
IODev Mosquitto
NAME Zisterne
NR 245868
STATE 27
TYPE MQTT_DEVICE
READINGS:
2019-03-19 15:48:54 transmission-state incoming publish received
2019-03-19 15:48:54 usensor 27
message_ids:
sets:
subscribe:
Sensor/Wasserstand
subscribeExpr:
^Sensor\/Wasserstand$
subscribeQos:
Sensor/Wasserstand 0
subscribeReadings:
Sensor/Wasserstand:
cmd
name usensor
Attributes:
IODev Mosquitto
group Zisterne
room MQTT-Devices
stateFormat usensor
subscribeReading_usensor Sensor/Wasserstand
Ich nutze den readingsProxy um den Abstand zur Wasseroberfläche den der Sensor misst in eine Behälter Füllhöhe umzurechnen.
kurze Rückmeldung.
Geht jetzt.
Durch das ganze testen hatte sich der Wemos mit dem Sensor aufgehangen. Ein reboot hat das Problem gelöst :-)
Danke an alle.