Wie anlegen: Globale Variable zum Zählen ?

Begonnen von grappa24, 08 Dezember 2013, 18:14:27

Vorheriges Thema - Nächstes Thema

grappa24

Ich überwache mehrere Fensterkontakte jeweils mit notify und möchte mir einen Zähler einrichten, der die Anzahl offener Fenster repräsentiert, benötige also eine globale Variable, mit der man rechnen kann.

Arbeite nicht mit Modulen, mein kompletter Code steht in der fhem.cfg

Hab zwar schon gestöbert, würde mich aber über einen Lesehinweis freuen ...

VG, Dieter

... Oder hat jemand eine bessere Idee, wie man abfragt, ob alle Fensterkontakte geschlossen sind (bei 5 ReadinsVal ... pro notify bin ich dann ausgestiegen ...  ;)




FHEM 6.1, 2 x RasPi 3B+, Debian Buster; KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200
Rollo-/Lichtsteuerung/-szenarien, T-Sensoren, Fensterkontakte, Heizungssteuerung, HEOS, Sprachsteuerung mit Alexa-FHEM, Netatmo, Nuki, ...

justme1968

wenn du wissen willst ob alle zu sind oder ob irgendeines offen ist schau dir structure an. die kannst du auch hierarchisch pro rahm und stockwerk verwenden.

wenn du wirklich zählen willst geht das zwar z.b. mit einem dummy, den bekommst du aber nie wieder synchron wenn mal ein notify verloren geht. also am besten eine routine die wirklich immer die fenster neu durchzählt wenn ein notify kommt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Puschel74

Hallo,

in der Heizungssteuerung_einfach wird damit
n_Wasserpumpe {
  my $brauche_hitze=0;
  my $ventile_im_leerlauf=0;
  my @@fhts=devspec2array("TYPE=FHT");
  foreach(@@fhts) {
  my $ventil=ReadingsVal($_, "actuator", "101%");
  $ventil=(substr($ventil, 0, (length($ventil)-1)));
  if ($ventil >= 40) {
    $brauche_hitze=1
  }
  if ($ventil < 25) {
    $ventile_im_leerlauf++
  }
}
if ($brauche_hitze != 0) {
  fhem("set Wasserpumpe on") if (Value("Wasserpumpe") eq "Aus");
}
else {
  if ($ventile_im_leerlauf == @@fhts) {
    fhem("set Wasserpumpe off") if (Value("Wasserpumpe") eq "Ein");
  }
else {
  Log(3,"Heizbedarf: " . $ventile_im_leerlauf . " von " . @@fhts . " Stellantrieben im Leerlauf.");
}
}
}

über alle FHT die Ventilstellung ermittelt.

Wichtig ist hier das my @@fhts=devspec2array("TYPE=FHT");

Sollte sich das nicht so umbauen lassen das mit einem ("TYPE_FHTTK"); (sofern es FHTTK sind) über alle Fenster-Tür-Kontakte abgefragt wird?
Damit if ($ventile_im_leerlauf == @@fhts) {wird dann geprüft ob die Anzahl der Ventile im Leerlauf gleich der Anzahl der ermittelten FHT ist - die Räume also keine Anforderung mehr haben und dann die Wasserpumpe ausgeschaltet.

Nur mal so als Idee.

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.

grappa24

#3
Zitat von: justme1968 am 08 Dezember 2013, 18:20:00
wenn du wissen willst ob alle zu sind oder ob irgendeines offen ist schau dir structure an. die kannst du auch hierarchisch pro rahm und stockwerk verwenden.
Gute Idee, da ich die Kontakte ohnehin etagenweise zusammenfassen wollte. D.h. ich mach mir pro Etage eine structure und nochmal eine structure "fenster_alle", die die Etagen zusammenfasst. Wenn ich dann am Status von "fenster_alle" sehen kann, wenn auch nur einer der Kontakte auf ist (das wäre mein Ziel), bin ich "glücklich".

Zwei Stockwerke sind EIB-Kontakte (on/off), ein Stockwerk sind FS20-HMS-Kontakte (switch_detect on/off), mal sehen, ob das klappt ...

Ich merke gerade, wie das etagenweise Zusammenfassen der Fensterkontakte mir die einzelnen notify spart, indem einfach die übergeordneten structure "mitgeschaltet" werden, sehr cool ....
FHEM 6.1, 2 x RasPi 3B+, Debian Buster; KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200
Rollo-/Lichtsteuerung/-szenarien, T-Sensoren, Fensterkontakte, Heizungssteuerung, HEOS, Sprachsteuerung mit Alexa-FHEM, Netatmo, Nuki, ...

grappa24

noch eine Frage: Ich möchte den state eines HMS-100TFK umschreiben von "Switch Detect: on/off" nach on/off mit folgendem Attribut, scheint mir aber wegen der Doppelpunkte und Blanks im Namen nicht zu gehen ...

Etage_map Switch Detect: off:off Switch Detect: on:on

Das JPG zeigt die definition meiner structure

FHEM 6.1, 2 x RasPi 3B+, Debian Buster; KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200
Rollo-/Lichtsteuerung/-szenarien, T-Sensoren, Fensterkontakte, Heizungssteuerung, HEOS, Sprachsteuerung mit Alexa-FHEM, Netatmo, Nuki, ...

justme1968

dafür ist stateFormat und/oder eventMap des jeweiligen device zuständig. wenn dein device das nicht unterstützt sollte es möglich sein einen dummy dazwischen zu schalten oder ein readingsProxy device.

gruss
  andrr
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968