Hauptmenü

[gelöst] ReadingsAge

Begonnen von Schlafsack, 10 März 2024, 22:18:09

Vorheriges Thema - Nächstes Thema

Schlafsack

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

Aurel_B

#1
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 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

Icinger

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.
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

Schlafsack

Besten Dank, habe es mit readingsWatcher gelöst