Neues Modul: TEK603

Begonnen von eisler, 23 September 2014, 10:58:32

Vorheriges Thema - Nächstes Thema

eisler

Hallo,

Um eine maximale Lebensdauer der Batterien zu erreichen empfängt und interpretiert der Monitor die Messdaten in 60min Intervallen. Einstellen kann man das leider nicht, das ist abhängig von der Firmware.
Beim EcoMeter S für Zisterne, Wassertank sind das 30min Intervalle. Er misst aber in Echtzeit, sobald eine Füllstandsänderung von ≥3cm/min erfasst wird.

Grüße,
Stephan





fiedel

#31
Hi Stephan,

vielen Dank für das coole Modul! Ich bin jetzt vom KMF100S auf Ecometer umgestiegen und war sehr erleichtert, dass es in FHEM schon was dafür gibt.

Ich hätte auch eine Frage zum Timing der Daten: Wenn sich der Pegel in der Zisterne ändert, kommen ja sehr viele Datenpakete rein. Da ich diese logge um einen Plot dazustellen, wollte ich "event-on-change-reading, event-on-update-reading und event-min-interval" anwenden um die Datenflut zu bändigen. Das Modul scheint dies jedoch nicht zu unterstützen. Gibt es ggf. noch einen anderen Weg um die Datenmenge im Zaum zu halten?

Gruß
Frank

Edit: Hab es mit readingsProxy in den Griff bekommen: Einfach einen readingsProxy auf "RemainingUsableLevel" anlegen und dort die "readingFnAttribute" anlegen. Dann den readingsProxy loggen und plotten. Perfekt...  ;)
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

eisler

Hallo Frank,

schön das du mit readingsProxy eine Lösung gefunden hast.
Wenn möglich würde ich auch gerne "event-on-change-reading, event-on-update-reading und event-min-interval" in meinem Modul unterstützen,
konnte aber noch keine passende Entwickler Dokumentation finden.

Grüße,
Stephan

Burny4600

#33
Vielleicht hilft euch meine Config weiter.
Habe daraus eine Pegelmessung gemacht mit Druchflussmenge.


##############################
###          INPUT         ###
##############################
define proteus TEK603 /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0
attr proteus alias Aussenbereich - Mühlbach - Pegelmessung
attr proteus devStateIcon open:usb@red opened:usb@green
attr proteus group Schnittstellen
attr proteus icon time_graph
attr proteus room _RxTx
attr proteus userReadings RemainingUsableLevel_m3psec:RemainingUsableLevel.* {ReadingsVal("proteus","RemainingUsableLevel",0)*0.9}
attr proteus verbose 1

# -----------------------------------------------------------------------------------------------
# -----------------------------------------------------------------------------------------------

##############################
###      LOG DEVICES       ###
##############################
define FileLog_TEK603_RUL FileLog /media/hdd/fhem/log01/bachniveau/TEK603_RUL-%Y-%m.log proteus:RemainingUsableLevel:.*|TEK603_RUL
attr FileLog_TEK603_RUL alias Mühlbach Pegelstand
attr FileLog_TEK603_RUL logtype :,text
attr FileLog_TEK603_RUL room _LOG
define SVG_TEK603_RUL SVG FileLog_TEK603_RUL:SVG_TEK603_RUL:CURRENT
attr SVG_TEK603_RUL fixedrange month
attr SVG_TEK603_RUL group Umwelt lokal
attr SVG_TEK603_RUL label "TEK603_RUL Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr SVG_TEK603_RUL room Pegelmessung Mühlbach,Wetterstation
# attr SVG_TEK603_RUL group Umwelt lokal
# attr SVG_TEK603_RUL room Wetterstation

define FileLog_TEK603_RULm3 FileLog /media/hdd/fhem/log01/bachniveau/TEK603_RULm3-%Y-%m.log proteus:RemainingUsableLevel_m3psec:.*|TEK603_RULm3
attr FileLog_TEK603_RULm3 alias Mühlbach Durchflußmenge
attr FileLog_TEK603_RULm3 logtype :,text
attr FileLog_TEK603_RULm3 room _LOG
define SVG_TEK603_RULm3 SVG FileLog_TEK603_RULm3:SVG_TEK603_RULm3:CURRENT
attr SVG_TEK603_RULm3 fixedrange month
attr SVG_TEK603_RULm3 group Umwelt lokal
attr SVG_TEK603_RULm3 label "TEK603_RULm3 Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr SVG_TEK603_RULm3 room Pegelmessung Mühlbach,Wetterstation
# attr SVG_TEK603_RULm3 group Umwelt lokal
# attr SVG_TEK603_RULm3 room Wetterstation

define FileLog_TEK603_TEMP FileLog /media/hdd/fhem/log01/bachniveau/TEK603_TEMP-%Y-%m.log proteus:Temperature:.*|TEK603_TEMP
attr FileLog_TEK603_TEMP alias Mühlbach Niveau Sensortemperatur
attr FileLog_TEK603_TEMP logtype temp4:Temp,text
attr FileLog_TEK603_TEMP room _LOG
define SVG_TEK603_TEMP SVG FileLog_TEK603_TEMP:SVG_TEK603_TEMP:CURRENT
attr SVG_TEK603_TEMP group Umwelt lokal
attr SVG_TEK603_TEMP label "TEK603_TEMP Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr SVG_TEK603_TEMP room Pegelmessung Mühlbach,Wetterstation
# attr SVG_TEK603_TEMP group Umwelt lokal
# attr SVG_TEK603_TEMP room Wetterstation

define FileLog_TEK603_TUC FileLog /media/hdd/fhem/log01/bachniveau/TEK603_TUC-%Y-%m.log proteus:TotalUsableCapacity:.*|TEK603_TUC
attr FileLog_TEK603_TUC alias Mühlbach maximales Niveau
attr FileLog_TEK603_TUC logtype :,text
attr FileLog_TEK603_TUC room _LOG

define FileLog_TEK603_U FileLog /media/hdd/fhem/log01/bachniveau/TEK603_U-%Y-%m.log proteus:Ullage:.*|TEK603_U
attr FileLog_TEK603_U alias Mühlbach Niveausensor Leerraum oben
attr FileLog_TEK603_U logtype :,text
attr FileLog_TEK603_U room _LOG

# -----------------------------------------------------------------------------------------------
# -----------------------------------------------------------------------------------------------

##############################
###          GROUP         ###
##############################
define proteusrg readingsGroup TYPE=TEK603:<%time_graph>,<Durchflussmenge>,RemainingUsableLevel_m3psec\
TYPE=TEK603:<%time_graph>,<Wasserstand>,RemainingUsableLevel\
TYPE=TEK603:<%temp_temperature>,<Sensortemperatur>,Temperature\
TYPE=TEK603:<%time_graph>,<Meßbereich>,TotalUsableCapacity\
TYPE=TEK603:<%time_graph>,<Leerraum>,Ullage
attr proteusrg alias Proteus Niveaumessung Mühlbach
attr proteusrg group Sensoren
attr proteusrg room Pegelmessung Mühlbach
attr proteusrg valueFormat {RemainingUsableLevel_m3psec => "%1.f m³/h",\
RemainingUsableLevel => "%1.f cm",\
Temperature => "%.1f °C",\
TotalUsableCapacity => "%1.f cm",\
Ullage => "%1.f cm"}
attr proteusrg valueStyle style="text-align:right"

# -----------------------------------------------------------------------------------------------
# -----------------------------------------------------------------------------------------------
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

LDSign

Hi Stephan

Ich habe mal Dein Modul um einen Wert erweitert (Füllstand in Prozent). Siehe Anlage.

Kannst Du das mal testen und ggf. in Deinen Code einfügen? Mir fehlt leider ein bisschen die Zeit um einen Github Pull-Request zu starten.

Danke :)

Viele Grüße,
Frank

eisler

Hallo Frank,

habe es mir angeschaut Füllstand in Prozent sieht gut aus, kann ich so übernehmen.

Hat es ein Grund warum du

return '' if($temp eq "-40.00" && $Ullage eq "0"); # TankLevel=NO_DATA

in

return '' if($temp eq "-40" && $Ullage eq "0"); # TankLevel=NO_DATA

geändert hast?

Grüße
Stephan

LDSign

Hi Stephan

Huch, die Zeile hab ich nicht angerührt - ehrlich :) Hab den Code aus der aktuelle Fhem-Version von heute morgen.

Wann ist denn das Update verfügbar?

Gruß,
Frank

eisler

Hallo Frank,

Passt, hatte ich noch im diff hast du wirklich nicht geändert. :)
Update sollte morgen verfügbar sein.

Grüße
Stephan

LDSign


fiedel

Gibt es eigentlich bei euch Erfahrungen mit Werte- Ausreißern? Wenn sich bei mir die Zisterne füllt (plätschert von oben rein) und leert (Wasseroberfläche völlig ruhig) habe ich Ausreißer (siehe Screenshot). Sind die bei dem System normal?

Gruß
Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

LDSign

Hi

Ja, das habe ich auch immer mal wieder.

@Stephan:

Könntest Du eine Überprüfung einbauen, dass Werte ignoriert werden, die größer der max. Kapazität sind? Also

RemainingUsableLevel > TotalUsableCapacity = "Reading verwerfen"

Ich denke, das müsste einen Großteil der unsinnigen Werte verhindern. Was meinst Du dazu?

Gruß,
Frank

eisler

Hallo,

wenn die Ausreißer immer größer TotalUsableCapacity sind würde das "Reading verwerfen" gehen. Dann sind die Werte aber sinnlos und eher ein Bug in der Firmware des EcoMeters. Die Information würde ich dann gerne so an den Hersteller geben.

Grüße
Stephan

Burny4600

Solche Ausreisser kommen bei mir auch immer wieder vor.
Was dabei noch auffällt ist das das Ganze damit anfängt das permanent Werte eingelesen werden was nicht notwendig ist, da sich das Niveau gar nicht geändert hat.

Anbei ein LOG wo das wunderschön ersichtlich ist, und auch Werte (Ausreiser) entstehen die ea gar nicht geben kann.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

fiedel

#43
Hier mal meine Übergangslösung gegen die Ausreißer:

Attr userReading zum Modul:
content {tek603_filter($name)}

In die MyUtils:
sub tek603_filter($) {

  my ($tek603_name) = @_;
  my $lev = ReadingsNum("$tek603_name","RemainingUsableLevel",0);
  my $cap = ReadingsNum("$tek603_name","TotalUsableCapacity",0);
 
if (($lev - 300) <= $cap) {
return sprintf "%.1f",$lev*0.001
}
}


Das "- 300" ist ein individueller Offset der bewirkt, dass ein geringfügiges Überfüllen auch noch gemessen wird.
Das userReading "content" wird dann in einem ReadingsProxy weiterverarztet:

define Sens_L_Zisterne readingsProxy Zisterne_Ecometer:content
attr Sens_L_Zisterne event-min-interval content:300
attr Sens_L_Zisterne event-on-change-reading content:0.5
attr Sens_L_Zisterne stateFormat Inhalt: content m³
attr Sens_L_Zisterne userReadings content {ReadingsNum("Zisterne_Ecometer","content",0)}


Geloggt wird das Reading "content" des readingsProxy (hier "Sens_L_Zisterne") .

Edit: Nach langem Probieren und immer wieder Commandref + Wiki lesen, bin ich nun mit dem Verhalten bei "Schnellfeuer" des Sensors zufrieden. Eigentlich könnte man das event-on-change-reading sogar noch komplett weg lassen. Wichtig ist das zusätzliche Reading (content) im readingsProxy, welches sich nun per event-min-interval wunschgemäß bändigen lässt.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

miwu

Hallo,

ich versuche auch gerade, mein Ecometer an FHEM anzubinden. Ärgerlicherweise werden mir aber bis auf den Status keinerlei Readings angezeigt (siehe angehängtes Bild).

Damit das Modul lief habe ich noch ein Paket nachinstalliert:

aptitude install libdigest-crc-perl

demesg ergab:

root@raspberrypi:/opt/fhem/log# dmesg | grep cp210x
[21248947.470461] usbcore: registered new interface driver cp210x
[21248947.470641] usbserial: USB Serial support registered for cp210x
[21248947.470798] cp210x 1-1.2:1.0: cp210x converter detected
[21248947.471562] usb 1-1.2: cp210x converter now attached to ttyUSB0


Daher habe ich den Sensor mit

define Niveausensor TEK603 /dev/ttyUSB0


angelegt.

Was könnte ich vergessen haben?

Vielen Dank für Eure Hilfe!