Firmata Abfragerythmus

Begonnen von cberl, 01 April 2014, 21:54:21

Vorheriges Thema - Nächstes Thema

cberl

Hallo in die Runde,

ich habe nun einen Drucksensor an meine Gartenpumpe gehangen, lese den mittels frm_ad aus, was auch prima klappt. Da ich bei jeder Druckänderung einen Messwert bekomme, werde ich nun von der Datenmenge erschlagen (5MB logfile in 3 Tagen). Mir würde ein Messwert aller 30 sec. ausreichen. Von den anderen Pins möchte ich aber die standartmäßigen live Ausgaben. Wie bekomme ich das hin?
Schon mal besten Dank. Chris
Fhem immer aktuell @win2016 und @ubuntu VM|7xFRM/ArduinoEthernet|Homematic|HMLan|CUNO|HarmonyHub|Modbus|Z-Wave|Milight-Hub|MQTT|OWX an ETH-UART|GoogleAssist,Alexa,Sonos|2nHelios IP Vario|Amad-Odroid|Telegram|Enigma2

Joachim

event-on-change-reading

in der commandref lesen
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

ntruchsess

Zitat von: cberl am 01 April 2014, 21:54:21Mir würde ein Messwert aller 30 sec. ausreichen. Von den anderen Pins möchte ich aber die standartmäßigen live Ausgaben.

FRM attribute 'sampling-interval' gilt für alle Analog-pins, continious i2c-read und Rotary-Encoder.
Wenn Deine anderen Pins Digital-IN-Pins sind, kannst Du das sampling-interval ruhig auf 30 Sekunden stellen, dann ist Fhem nicht so ausgelastet. Digital-In Pins reporten, so schnell der Arduino bzw. die Schnittstelle das kann (aber nur, wenn sich Pin-zustände ändern).

Wenn man mehrere Analog-Input-Pins mit unterschielicher Lograte haben will muss man sampling-interval (an FRM) und event-min-interval (am FRM_AD) geeignet kombinieren. Sampling-interval für das schnellste Device, event-min-interval um die anderen FRM_ADs runterzubremsen.

event-on-change-reading hilft bei Analog-pins manchmal nichts, weil die Werte (je nach Anwendungsfall und Störneigung) oft nicht ausreichend stabil genug stehen bleiben. Reicht ja, wenn das kleinste Bit zappelt...

Gruß,

Norbert
while (!asleep()) {sheep++};

cberl

der eingesetzte Drucksensor ist sehr empfindlich, da zappelt immer ein Bit...
1000x Dank für die Infos. Chris
Fhem immer aktuell @win2016 und @ubuntu VM|7xFRM/ArduinoEthernet|Homematic|HMLan|CUNO|HarmonyHub|Modbus|Z-Wave|Milight-Hub|MQTT|OWX an ETH-UART|GoogleAssist,Alexa,Sonos|2nHelios IP Vario|Amad-Odroid|Telegram|Enigma2

woody

Hallo Leute,
ich suche jetzt schon geraume Zeit im Forum wie ich den Analogwerten welche mir schön im Fhem angezeigt werden,
einen Bereich zuordnen kann, Leider habe ich noch nichts gefunden wie das geht:

Auszug fhem.cfg

define Arduino FRM 3040 global
attr Arduino room Arduino
#
define A1 FRM_AD 14
attr A1 IODev Arduino
attr A1 event-min-interval 60
attr A1 room Arduino
attr A1 stateFormat reading

Ich hätte gerne das mir die 0-5V als 0-6500 Liter angezeigt werden.

Ich bekomme es irgendwie nicht hin.

Viele Grüße

woody

Joachim

userReading in der commandref lesen
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

woody

Hallo Joachim,
in meiner commandref (die im Internet) kann ich diesen Befehl leider nicht finden ??
Entweder bin ich blind, oder es gibt ihn nicht mehr.

Kann mir mal jemand einen Tip geben wie das funktioniert mit den Werten?

VG
woody

Joachim

Blind!

userReadings
A comma-separated list of definitions of user-defined readings. Each definition has the form:

    <reading>[:<trigger>] [<modifier>] { <perl code> }
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

woody

So hab jetzt mal was probiert.......

define Zisterne FRM_AD 14
attr Zisterne IODev Arduino
attr Zisterne event-min-interval 60
attr Zisterne room Arduino
attr Zisterne stateFormat reading
define Wasserstand readingsProxy Zisterne:reading
attr Wasserstand room Arduino
attr Wasserstand userReadings Höhe { ReadingsVal("Zisterne","reading",0)*6.35;; }
                                                                 |                 |              |       |     
                                                          welcher Wert   hier hol     oder   Grund
                                                              ist das         ich die      hier?   wert
                                                                                 Daten?
0-5Volt soll 0-6500 Liter entsprechen.

Mir ist der syntax noch nicht so ganz klar.

VG
woody

Joachim

attr Wasserstand userReadings Höhe { ReadingsVal("Zisterne","reading",0)*1300 }
ReadingsVal= Bezeichnet einfach nur die "Schublade" in der die Werte liegen, für den Anfang immer ReadingsVal
Zisterne= Dein Device
reading= das reading, in dem Deine 0-5 V liegen, z.B. VDD
0= welcher Wert genommen wird, wenn VDD noch nicht gefüllt ist, in diesem Fall 0
1300= Multiplikator, wenn 5 Deinen 6500 entsprechen, dann muss die 5 mit 1300 (= 6500) multipiliziert werden.

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

woody

Zitat von: Joachim am 15 April 2014, 21:10:18
attr Wasserstand userReadings Höhe { ReadingsVal("Zisterne","reading",0)*1300 }
ReadingsVal= Bezeichnet einfach nur die "Schublade" in der die Werte liegen, für den Anfang immer ReadingsVal
Welchen Wert nimmt ReadingsVal denn bzw. aus welcher Schublade holt es sich den Wert?
Zisterne= Dein Device. Ausgabeschublade oder Eingabe?
reading= das reading, in dem Deine 0-5 V liegen, z.B. VDD die Werte habe ich ja digital
0= welcher Wert genommen wird, wenn VDD noch nicht gefüllt ist, in diesem Fall 0
1300= Multiplikator, wenn 5 Deinen 6500 entsprechen, dann muss die 5 mit 1300 (= 6500) multipiliziert werden.
da es digitale Werte sind, also 0-1023 habe ich den Faktor 6,35 ausgerechnet. Nur wo wird der Wert hingeschrieben?

Gruß
Woody