FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Schlafsack am 10 März 2024, 22:18:09

Titel: [gelöst] ReadingsAge
Beitrag von: Schlafsack am 10 März 2024, 22:18:09
Hallo

ich stehe auf dem Schlauch. Ich möchte meine Tuya-Geräte überwachen mit ReadingsAge. Ich bekomme es aber nicht hin, dass wenn ein Gerät "getrennt" ist, das Dummy Tuya_Verbindung auf getrennt geht, bzw. vielleicht geht es auch noch viel einfacher alle meine Geräte zu überwachen, ob sie Verbindung haben.

PS: die Zeiten sind aktuell nur zum testen so klein

defmod V_Tuya_Verbindung at +*00:01:03\
{\
  my $Verbindung_Couchlicht = ReadingsAge("tuya_local_xxxxxxxxxxxxxxxxxx8b","cur_voltage",-88);;\
  my $Verbindung_Fernseher_WZ = ReadingsAge("tuya_local_xxxxxxxxxxxxxxxxxxco","cur_voltage",-88);;\
  my $Verbindung_Ladedose = ReadingsAge("tuya_local_xxxxxxxxxxxxxxxxxxz7","cur_voltage",-88);;\
  my $Verbindung_Musikanlage = ReadingsAge("tuya_local_xxxxxxxxxxxxxxxxxxqa","cur_voltage",-88);;\
  my $Verbindung_Reiskocher = ReadingsAge("tuya_local_xxxxxxxxxxxxxxxxxx3k","cur_voltage",-88);;\
  my $Verbindung_Tresenlicht = ReadingsAge("tuya_local_xxxxxxxxxxxxxxxxxx8b","cur_voltage",-88);;\
  my $Verbindung_Ventilator = ReadingsAge("tuya_local_xxxxxxxxxxxxxxxxxx4c","cur_voltage",-88);;\
\
  if\
    ($Verbindung_Couchlicht >= 600)\
      {fhem "setreading Tuya_Verbindung Couchlicht getrennt"}\
  elsif\
    ($Verbindung_Fernseher_WZ >= 600)\
      {fhem "setreading Tuya_Verbindung Fernseher_WZ getrennt"}\
  elsif\
    ($Verbindung_Ladedose >= 600)\
      {fhem "setreading Tuya_Verbindung Ladedose getrennt"}\
  elsif\
    ($Verbindung_Musikanlage >= 600)\
      {fhem "setreading Tuya_Verbindung Musikanlage getrennt"}\
  elsif\
    ($Verbindung_Reiskocher >= 600)\
      {fhem "setreading Tuya_Verbindung Reiskocher getrennt"}\
  elsif\
    ($Verbindung_Tresenlicht >= 600)\
      {fhem "setreading Tuya_Verbindung Tresenlicht getrennt"}\
  elsif\
    ($Verbindung_Ventilator >= 600)\
      {fhem "setreading Tuya_Verbindung Ventilator getrennt"}\
  else\
      {fhem "setreading Tuya_Verbindung Couchlicht verbunden"}\
      {fhem "setreading Tuya_Verbindung Fernseher_WZ verbunden"}\
      {fhem "setreading Tuya_Verbindung Ladedose verbunden"}\
      {fhem "setreading Tuya_Verbindung Musikanlage verbunden"}\
      {fhem "setreading Tuya_Verbindung Reiskocher verbunden"}\
      {fhem "setreading Tuya_Verbindung Tresenlicht verbunden"}\
      {fhem "setreading Tuya_Verbindung Ventilator verbunden"}\
      {fhem "set Tuya_Verbindung verbunden"}\
  if
    (Tuya_Verbindung Couchlicht eq "getrennt" || Tuya_Verbindung Fernseher_WZ eq "getrennt" || Tuya_Verbindung Ladedose eq "getrennt" ||
    Tuya_Verbindung Musikanlage eq "getrennt" || Tuya_Verbindung Reiskocher eq "getrennt" || Tuya_Verbindung Tresenlicht eq "getrennt" || Tuya_Verbindung Ventilator eq "getrennt")
      {fhem "set Tuya_Verbindung getrennt"}
}

Besten Dank für die Unterstützung
Titel: Aw: ReadingsAge
Beitrag von: Aurel_B am 10 März 2024, 23:37:26
Hmmm, deine Logik scheint mir etwas komisch: es kann ja sein, dass mehrere Geräte nicht verbunden sind? In diesem Fall ist das "elsif" nicht korrekt da ja beim ersten nicht verbundenen Gerät die weitere Überprüfung wegfällt? Was ich machen würde (Pseudocode):

my $AlleGeraeteVerbunden = true;

if ($Verbindung_Couchlicht >= 600) {
  fhem "setreading Tuya_Verbindung Couchlicht getrennt";
  $AlleGeraeteVerbunden = false;
} else {
  fhem "setreading Tuya_Verbindung Couchlicht verbunden";
}
-> Wiederholen für alle Geräte
am Schluss:
if ($AlleGeraeteVerbunden) {
  fhem "set Tuya_Verbindung verbunden";
} else {
  fhem "set Tuya_Verbindung getrennt";
}

Edit: da das rasch unübersichtlich werden könnte ist eventuell DOIF mit Templates (https://wiki.fhem.de/wiki/DOIF/Templates) eine Alternative? Im DOIF hast du auch einen direkten Zugriff auf das Alter eines Readings: https://fhem.de/commandref_DE.html#DOIF_Zeitspanne_eines_Readings_seit_der_letzten_Aenderung (https://fhem.de/commandref_DE.html#DOIF_Zeitspanne_eines_Readings_seit_der_letzten_Aenderung)
Titel: Aw: ReadingsAge
Beitrag von: Icinger am 11 März 2024, 08:22:32
Schau dir mal das Modul readingsWatcher an.
Da kannst du für jedes einzelne Device ein zu überwachendes Reading inkl. Timeout angeben und hast alles gesammelt an einem Platz.
Titel: Aw: ReadingsAge
Beitrag von: Schlafsack am 11 März 2024, 11:00:50
Besten Dank, habe es mit readingsWatcher gelöst