FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Puschel74 am 29 November 2013, 21:38:31

Titel: userReading bei Dummys
Beitrag von: Puschel74 am 29 November 2013, 21:38:31
Hallo zusammen,

ich hab ja schon einiges versucht aber es klappt einfach nicht so wie ich das gedacht habe.

Ausgangssituation:

Ich habe an einem RasPi 2 I2C-Senoren dran die ich per at zyklisch abfrage.
Definiert sind beide Sensoren so:

define Hzg_Ruecklauf dummy
attr Hzg_Ruecklauf room I2C
define Hzg_Vorlauf dummy
attr Hzg_Vorlauf room I2C


Die Abfragewerte sehen so aus wie im Screenshot.
Im zweiten Screenshot mal einen Dummy gesamt.
Abgefragt wird, wie gesagt, per at das ein notify triggert welches eine sub in der 99_myUtils.pm aufruft und die Werte dann so
Sensor_I2C {
my $temp = messen("@");
my ($sensor, $temp_sensor) = split /\ /, "$temp", 2;
my ($sensor_temp, $zeichen) = split /\ /, "$temp_sensor", 2;
if ($sensor eq "0x48") {
  $sensor = "Heizraum_Luft";
}
if ($sensor eq "0x49") {
  $sensor = "Hzg_Ruecklauf";
}
if ($sensor eq "0x4c") {
  $sensor = "Hzg_Vorlauf";
}
$zeichen = " °C";
fhem("set $sensor $sensor_temp $zeichen");
}

in den Dummy schreibt.

Das ganze klappt auch einwandfrei und der Plot klappt auch wunderbar aber ...

Nun wollte ich das ganze per userReading in einen Dummy Heizung schreiben den ich so definert habe:
define Heizung dummy
attr Heizung room I2C
attr Heizung userReading Vorlauftemperatur { Value("Hzg_Vorlauf");; }, Ruecklauftemperatur { Value("Hzg_Ruecklauf");; }


In der commandref und in den Beispielen wird immer ReadingsVal abgefragt.
Klappt das mit Value nicht und muss ich erst jedem dummy per userReading ein neues Reading "spendieren" um das dann gesammelt in einem Dummy als userReading eintragen zu können oder wo liegt hier, mal wieder, mein Denkfehler?
Und das als Moderator vom Anfängerbereich  8)

Für sachdienliche Hinweise bin ich mal wieder dankbar.

Grüße
Titel: Antw:userReading bei Dummys
Beitrag von: justme1968 am 29 November 2013, 21:45:48
Value liest STATE und nicht state. nimm mal ReadingsVal(<device>,"state","").

die interne reihenfolge ist:
- das device aktualisiert ein oder mehrere readings (auch state)
- die user readings werden getrigert und setzen ihre werte
- jetzt erst wird STATE gesetzt

d.h. du bekommst mit VALUE immer STATE aus dem vorherigen trigger. nicht dem aktuellen.

gruss
  andre
Titel: Antw:userReading bei Dummys
Beitrag von: Puschel74 am 29 November 2013, 22:10:09
Hallo,

danke für die Hilfe aber (siehe Screenshot).

Auch nach Änderung auf Vorlauftemperatur { ReadingsVal("Hzg_Vorlauf","state","");; }, Ruecklauftemperatur { ReadingsVal("Hzg_Ruecklauf","state","");; }
bekomme ich kein neues Reading im Dummy *grübel*

Grüße
Titel: Antw:userReading bei Dummys
Beitrag von: justme1968 am 29 November 2013, 22:20:20
userReadings werden getriggert wenn in dem device zu dem sie gehören ein reading aktualisiert wird.

dein set geht auf Hzg_Ruecklauf oder Hzg_Vorlauf, deine userReadings hängen aber am dummy Heizung. das geht so nicht.

beschreib doch mal ganz kurz was du erreichen willst. warum stehen vorlauf und rücklauf in zwei unterschiedlichen dummys? warum möchtest du es dann doch noch in einem dritten zusammen fassen?

gruss
  andre
Titel: Antw:userReading bei Dummys
Beitrag von: Puschel74 am 29 November 2013, 22:28:50
Hallo,

danke, mal wieder, für dein Durchhaltevermögen mit mir  8)

Ich hab 2 I2C-Sensoren die ich ob meiner "programmiertechnischen" Unzulänglichkeit, für mich glücklicherweise, bisher in 2 Dummys schreiben kann (und so auch einen Plot hinbekomme).
Nun dachte ich mir in meiner Naivität das ich diese 2 Dummys (Werte) in einem neuen Dummy zusammenfassen könnte/müsste.
Ich wollte eigentlich nur "verstehen" wie ich Werte in userReadings packen kann.
Und zwar nicht nur lt. commandref sondern an einem (meinem) lebenden Beispiel.

Wenn das alles in einem Dummy geht bin ich gerne bereit meine "Programmierung" dahingehend umzustellen.
Solange du mich "an die Hand nehmen" würdest  ;D

Grüße

Edith:

Aufgrund deines Satzes:
ZitatuserReadings werden getriggert wenn in dem device zu dem sie gehören ein reading aktualisiert wird.
Hab ich mal versucht in Hzg_Vorlauf ein userReading zu definieren was aber zu keinem neuen Reading führt (oder ich versteh da was komplett falsch).
Titel: Antw:userReading bei Dummys
Beitrag von: justme1968 am 29 November 2013, 22:33:18
statt dem set in deinem Sensor_I2C einfach ein setreading verwenden und in einem dummy direkt zwei readings erzeugen.

je nach dem was du mit den werten des dummy machst ist es dann eventuell sinnvoll mit stateFormat state so zusammenzubauen das du etwas zum anzeigen hat. oder mit einer readingsGroup beide readings zusammen anzeigen, oder, oder, ... :)



gruss
  andre
Titel: Antw:userReading bei Dummys
Beitrag von: Puschel74 am 29 November 2013, 22:43:20
Hallo,

Zitatstatt dem set in deinem Sensor_I2C einfach ein setreading verwenden und in einem dummy direkt zwei readings erzeugen.
soll heissen das ich aus

fhem("set $sensor $sensor_temp $zeichen");
ein
fhem("setreading Heizung $sensor $sensor_temp $zeichen");
machen kann und das Reading dann einfach nur in Hzg_Vorlauf und Hzg_Ruecklauf ... und da verliessen sie ihn.

Ich möchte die Werte von Hzg_Ruecklauf und Hzg_Vorlauf versuchen in ein "Device Heizung" einmal als Reading Vorlauftemperatur und einmal als Reading Ruecklauftemperatur zu bekommen.

Grüße
Titel: Antw:userReading bei Dummys
Beitrag von: justme1968 am 29 November 2013, 22:58:45
ja. genau. wenn du den extra dummy für die luft  behalten willst so:

Sensor_I2C {
  my $temp = messen("@");
  my ($sensor, $temp_sensor) = split /\ /, "$temp", 2;
  my ($sensor_temp, $zeichen) = split /\ /, "$temp_sensor", 2;

  if ($sensor eq "0x48") {
    fhem("set Heizraum_Luft $sensor_temp °C");
  } elsif ($sensor eq "0x49") {
    fhem("setreading Heizung Ruecklauftemperatur $sensor_temp °C");
  } elsif ($sensor eq "0x4c") {
    fhem("setreading Heizung Vorlauftemperatur $sensor_temp °C");
  }
}


wobei ich die °C nicht mit ins reading schreiben würde. aber das ist geschmackssache.

das splitten am anfang kann mann vermutlich mit einem =~ m/.../ auf einen schlag machen. ist aber eigentlich auch egal.

gruss
  andre
Titel: Antw:userReading bei Dummys
Beitrag von: Puschel74 am 29 November 2013, 23:12:01
Hallo,

perfekt super danke dir.

Werd ich morgen gleich mal ausprobieren *gähn*

Das mit dem splitten - da war ich schon froh das ich das so kompliziert hinbekommen habe  ;D
Und das obwohl das Perl-für-Anfänger-Buch neben mir liegt.

Grüße

Edith: Hmmmmm.
Zitat2013.11.30 17:37:18 3: setreading Heizung Vorlauftemperatur 42.0 °C : Unknown command setreading, try help
Ich werd mich mal in die (un)tiefen der commandref stürzen
Titel: Antw:userReading bei Dummys
Beitrag von: HotteFred am 15 Januar 2015, 11:34:51
Zitat von: Puschel74 am 29 November 2013, 23:12:01
Edith: Hmmmmm.

Hallo Puschel,

konntest du das zuende bringen? Ich hänge hier auch gerade fest...
Ich hätte ausserdem gerne noch die differenz von VL und RL, aber das ist dann noch ein anderes Thema.

Danke.
Gruß