attr / userattr schreibender Zugriff möglich?

Begonnen von fiedel, 18 Juni 2013, 10:41:40

Vorheriges Thema - Nächstes Thema

fiedel

Hallo zusammen,

auf ein attr das folgendermaßen aussieht, würde ich gern schreibend zugreifen und so den Wert aus FHEM heraus setzen (die Berechnung dafür muss ich noch stricken):

attr OW_Counter offsetA 24994.18

Verschiedene Schreibweisen mit und ohne Perl habe ich schon probiert, aber der Wert bleibt standhaft. ;o)
Gelesen wird der Wert so und das funktioniert auch problemlos:

AttrVal("OW_Counter","offsetA",0)

Aber habt ihr eine Idee für mich, wie ich setzen / überschreiben kann?

Falls es keinen Weg gibt, könnte ich die Attribute durch Dummys ersetzen, aber das wäre nicht so elegant...

Viele Grüße

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

UliM

Hi,
mit AttrVal() liest Du nur aus.
Schreiben kannst Du mit
{fhem("attr OW_Counter offsetA $wert")}

Viel Erfolg,
Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

fiedel

Hi Uli,

super vielen Dank!!! Das "funzt" ;o)

Viele Grüße

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

fiedel

Hier mal der Programmschnipsel, für den ich das gebraucht habe.

Meine Energiezählung mache ich so wie hier von dougie gezeigt:

http://forum.fhem.de/index.php?t=msg&goto=72943&rid=310&srch=AttrVal%28%22OW_Counter%22%2C%22offsetA%22%2C0%29#msg_72943

Dafür muss man sich ggf. ab und zu den Taschenrechner schnappen und die Werte offsetA und offsetB berechnen. Da aber FHEM die dazu notwendigen Daten schon kennt, habe ich mir gedacht - lass das doch den machen, der es sowieso besser kann... Mit diesem kleinen "Tool" gibt man nur noch den realen Zählerstand in der Form "set Dum_Input_A_D <Wert>" ins Eingabefeld ein und das Offset wird automatisch richtig eingestellt.

Vielleicht ist ja noch jemand so rechenfaul wie ich. ;o)



# Berechnung der Offset- Werte für die realen Zählerstände "DisplayA/B"


# Dummys zur Eingabe des Zählerstandes
# Benutzung: set Dum_Input_A_D <Wert>
define Dum_Input_A_D dummy
attr Dum_Input_A_D group Programm
attr Dum_Input_A_D room 5_System

define Dum_Input_B_D dummy
attr Dum_Input_B_D group Programm
attr Dum_Input_B_D room 5_System

# Funktion zum Berechnen und Setzen der Offset- Werte:
define Func_SetOffset_N notify Dum_Input_A_D|Dum_Input_B_D  { \
\
  my $aufrufer_SetOffset = "@" ;;\
  my $valueA = (ReadingsVal("OW_Counter","counters.A",0)/75.0);;\
  my $valueB = (ReadingsVal("OW_Counter","counters.B",0)/100.0);;\
  my $setoffsetA = (Value("Dum_Input_A_D") - $valueA);;\
  my $setoffsetB = (Value("Dum_Input_B_D") - $valueB);;\
\
 if ($aufrufer_SetOffset eq "Dum_Input_A_D") { \
     Log 1, "Setze OW_Counter.offsetA auf: $setoffsetA";; \
     fhem("attr OW_Counter offsetA $setoffsetA");;\
 } \
 if ($aufrufer_SetOffset eq "Dum_Input_B_D") { \
     Log 1, "Setze OW_Counter.offsetB auf: $setoffsetB";; \
     fhem("attr OW_Counter offsetB $setoffsetB");;\
 }\
                                             { \
     fhem("save");;\
 }\
}
attr Func_SetOffset_N group Programm
attr Func_SetOffset_N room 5_System


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

Puschel74

Hallo,

das hat doch sicher noch im Wiki Platz ;-)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.