FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: choetzu am 21 November 2017, 17:22:41

Titel: Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 21 November 2017, 17:22:41
Hallo,

ich habe ein structure gemacht, welcher die Zustände meiner Lampen auswertet. Nun möchte ich gerne erreichen, dass es mir errechnet, wieviele Lampen innerhalb der structure auf ON sind.. Also das Ergebnis sollte eine Zahl sein. Geht das?

Lg c
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 21 November 2017, 23:04:20
hab da was gefunden..https://forum.fhem.de/index.php/topic,57091.msg485057.html#msg485057

finde aber die Integration von code in fhem.pl etwas heikel... was meint ihr?
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: igami am 21 November 2017, 23:14:01
Guck mal in die deutsche commandref von DOIF, dort gibt es einen Abschnitt aggregieren von Werten oder so ähnlich
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: MadMax-FHEM am 22 November 2017, 00:02:13
Zitat von: choetzu am 21 November 2017, 23:04:20
hab da was gefunden..https://forum.fhem.de/index.php/topic,57091.msg485057.html#msg485057

finde aber die Integration von code in fhem.pl etwas heikel... was meint ihr?

Da wird nichts in fhem.pl integriert, sondern abgekupfert...
...der genannte Code steht vermutlich in myUtils oder direkt im Notify...

Gruß, Joachim
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 23 November 2017, 14:30:09
super, herzlichen Dank. Das hat mich zur Lösung geführt..

Innerhalb DOIF kann dies gelöst werden.. Siehe nebst Command REF auch https://forum.fhem.de/index.php/topic,70624.0.html

bei mir habe ich es wie folgt gemacht:

define Licht_AN_ANZAHL DOIF (leerschlag)
attr state [#""::$STATE eq "on" and $group eq "Licht"]

Somit werden alle "on" in der Gruppe "Licht" gezählt.. As simple as that..

Lg c
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: MadMax-FHEM am 23 November 2017, 15:01:52
Na dann...

Bitte noch den Thread als gelöst kennzeichnen, umbenennen z.B. in "[gelöst] Structure: Anzahl selber Zustand zählen"

Gruß und viel Spaß, Joachim
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: Damian am 23 November 2017, 15:03:54
Wenn du das Event einschränken könntest (statt "", z. B. alle Devices, die mit blabla anfangen oder mit blabla enden o. ä.), würde es weniger dein System belasten. So werden bei jedem! Event alle Systemdevices durchforstet.
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 23 November 2017, 20:16:03
Zitat von: Damian am 23 November 2017, 15:03:54
Wenn du das Event einschränken könntest (statt "", z. B. alle Devices, die mit blabla anfangen oder mit blabla enden o. ä.), würde es weniger dein System belasten. So werden bei jedem! Event alle Systemdevices durchforstet.

danke, was muss ich machen, wenn ich die devices nehmen will, die mit FSB61 enden? Bei devices die mit FSB61 anfangen würden, käme ja ein ^FSB61... und was wenns damit endet?

und kann man auch 2 verschiedene Endungen in einem machen? deshalb hab ich eine gruppe gebildet..
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 24 November 2017, 16:17:47
und wenn ich noch $TYPE ergänze, wäre das evtl schlanker?

also attr state [#""::$STATE eq "on" and $group eq "Licht" and $TYPE eq "EnOcean"]

Ich habe mehrere Lampen, welche unterschiedlich anfangen und auch unterschiedlich enden, deshalb wird es schwierig beim Device-Namen anzusetzen..
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: Damian am 24 November 2017, 17:20:03
Zitat von: choetzu am 24 November 2017, 16:17:47
und wenn ich noch $TYPE ergänze, wäre das evtl schlanker?

also attr state [#""::$STATE eq "on" and $group eq "Licht" and $TYPE eq "EnOcean"]

Ich habe mehrere Lampen, welche unterschiedlich anfangen und auch unterschiedlich enden, deshalb wird es schwierig beim Device-Namen anzusetzen..

Nein.Das Problem ist, dass diese Anweisung ohne spezifischen Trigger auf alles in FHEM reagiert.

Du könntest zumindest auf on reagieren, dann hast du schon viele Events ausgeschlossen:

#":on"....

Wenn irgendeine Systematik bei der Namensgebung der Devices erkennbar wäre, kann man auch passende regex definieren.



Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 24 November 2017, 19:50:38
ZitatDu könntest zumindest auf on reagieren, dann hast du schon viele Events ausgeschlossen:

#":on"....

Wenn irgendeine Systematik bei der Namensgebung der Devices erkennbar wäre, kann man auch passende regex definieren.

super, danke.. das hilft schon sehr. Meine Lampen haben 3 verschiedene verschiedene Teile im Namen. Entweder FUD61 (für Dimmer) oder NodOn (für Schalter) oder dann Poollicht (fürs Pool). Kann man das in einem regex bündeln?
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: Damian am 24 November 2017, 19:54:27
Zitat von: choetzu am 24 November 2017, 19:50:38
super, danke.. das hilft schon sehr. Meine Lampen haben 3 verschiedene verschiedene Teile im Namen. Entweder FUD61 (für Dimmer) oder NodOn (für Schalter) oder dann Poollicht (fürs Pool). Kann man das in einem regex bündeln?

klar

[#"FUD61|NodOn|Poollicht:"...
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 24 November 2017, 20:04:08
du bist ne rakete!!! Das funktioniert perfekt.. herzlichen Dank.

darf ich noch was fragen? wie erkenne ich, ob ein DOIF oder sonst ein Modul viel ressourcen benutzt? Ich denke nicht nur anhand der anzahl ausgelöster events, oder??

lg c
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: Damian am 24 November 2017, 22:37:39
https://fhem.de/commandref.html#apptime
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 14 Februar 2018, 22:07:43
Hallo

ich muss dieses Thema wieder aufnehmen, weil ich am rumbasteln bin. Ich habe nun folgenden DOIF

[#"_L_|_D_|Licht:"::$STATE eq "on" and $group eq "Dimmer"]

Nun möchte ich auch noch die $group "Licht" mit einbeziehen, also nicht nur "Dimmer". Mit "Licht|Dimmer" gehts nicht. Auch nicht mit "[Licht|Dimmer]".. und

[#"_L_|_D_|Licht:"::$STATE eq "on" and $group eq "Dimmer" or $group eq "Licht"]
spuckt mir logischerweise komplett falsche Werte aus.

Was wäre denn richtig?
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: Damian am 14 Februar 2018, 23:18:16
Zitat von: choetzu am 14 Februar 2018, 22:07:43
Hallo

ich muss dieses Thema wieder aufnehmen, weil ich am rumbasteln bin. Ich habe nun folgenden DOIF

[#"_L_|_D_|Licht:"::$STATE eq "on" and $group eq "Dimmer"]

Nun möchte ich auch noch die $group "Licht" mit einbeziehen, also nicht nur "Dimmer". Mit "Licht|Dimmer" gehts nicht. Auch nicht mit "[Licht|Dimmer]".. und

[#"_L_|_D_|Licht:"::$STATE eq "on" and $group eq "Dimmer" or $group eq "Licht"]
spuckt mir logischerweise komplett falsche Werte aus.

Was wäre denn richtig?

Rangfolge der Operatoren (and/or) beachten:

[#"_L_|_D_|Licht:"::$STATE eq "on" and ($group eq "Dimmer" or $group eq "Licht")]
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: betateilchen am 14 Februar 2018, 23:22:03
Zitat von: choetzu am 21 November 2017, 17:22:41
ich habe ein structure gemacht, welcher die Zustände meiner Lampen auswertet. Nun möchte ich gerne erreichen, dass es mir errechnet, wieviele Lampen innerhalb der structure auf ON sind.. Also das Ergebnis sollte eine Zahl sein. Geht das?

Klar. Sogar ganz ohne DOIF und kryptische Codierung...


Genau diese drei Schritte passieren in folgendem Beispiel.
Es wird gezählt, wieviele Geräte innerhalb der Struktur "st_wz_Licht" den Status "off" haben, der gefundene Zahlenwert wird ausgegeben.


sub count_struct {
  fhem("set st_wz_Licht saveStructState status"); # Status der structure in das reading 'status' sichern
  my @count = (ReadingsVal('st_wz_Licht','status','') =~ /off/g); # zählen, wie häufig 'off' im reading 'status' vorkommt
  return @count; # Anzahl ausgeben
}

Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 15 Februar 2018, 21:30:36
hallo zusammen, herzlichen Dank.

Damian, hat geklappt!! Super.
bettateilchen, wo muss ich das eingeben, damit es wirkt? Myutils?

Und dann generell, welche der beiden Lösungen ist die "schonendere" fürs System?
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 16 Februar 2018, 20:17:20
Zitat von: betateilchen am 14 Februar 2018, 23:22:03
Klar. Sogar ganz ohne DOIF und kryptische Codierung...


  • aktuellen Status der Struktur in ein reading sichern
  • per regexp in dem reading das Vorkommen zählen
  • mit dem Ergebnis irgendwas tun (z.B. zu einem anderen Ergebnis addieren)

Genau diese drei Schritte passieren in folgendem Beispiel.
Es wird gezählt, wieviele Geräte innerhalb der Struktur "st_wz_Licht" den Status "off" haben, der gefundene Zahlenwert wird ausgegeben.


sub count_struct {
  fhem("set st_wz_Licht saveStructState status"); # Status der structure in das reading 'status' sichern
  my @count = (ReadingsVal('st_wz_Licht','status','') =~ /off/g); # zählen, wie häufig 'off' im reading 'status' vorkommt
  return @count; # Anzahl ausgeben
}


wo platzier ich diese Zeilen? In MyUtils hat es nicht geklappt. Und mit
set Licht_Structure saveStructState status
werden nur die Stati angezeigt..

Weiss jemand Bescheid?
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: betateilchen am 16 Februar 2018, 20:55:55
Mein Codeschnipsel sollte exemplarisch zeigen, wie man die Aufgabe in reinem (und klar verständlichem) perl umsetzt.
Perl-Code läßt sich sowohl in einem notify direkt (ich empfehle das aber nicht) oder in der 99_myUtils.pm unterbringen und aufrufen.
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 16 Februar 2018, 22:09:48
Zitat von: betateilchen am 16 Februar 2018, 20:55:55
Mein Codeschnipsel sollte exemplarisch zeigen, wie man die Aufgabe in reinem (und klar verständlichem) perl umsetzt.
Perl-Code läßt sich sowohl in einem notify direkt (ich empfehle das aber nicht) oder in der 99_myUtils.pm unterbringen und aufrufen.

ok, dann hab ich es doch richtig gemacht. es geht aber nicht:

hier das List vom Structure
Internals:
   ATTR       Licht
   CHANGEDCNT 4
   DEF        Licht room=02_Licht
   DEVSPECDEF 1
   NAME       Licht_Structure
   NR         270
   NTFY_ORDER 50-Licht_Structure
   STATE      on
   TYPE       structure
   READINGS:
     2018-02-16 22:05:43   LastDevice      WZ_L_NodOn12
     2018-02-16 22:05:43   LastDevice_Abs  WZ_L_NodOn12
     2018-02-16 22:05:43   state           on
Attributes:
   alias      Licht
   clientstate_behavior relativeKnown
   clientstate_priority on off
   devStateIcon on:ios_on_fill@blue off:ios_off_fill@gray set_off:ios_off_fill@red
   group      Structure
   room       10_System


und hier meine 99_MyUtils. Ganz unten angehängt:
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

sub modify($$$$){
  my ($device,$value,$old,$new) = @_ ;
  my @devices = devspec2array($device) ;
   
  foreach $device (@devices){
    if ($value eq "DEF"){
      my $VALUE = InternalVal($device,$value,($value." error"));
      $VALUE =~ s/$old/$new/g;
      fhem("modify $device $VALUE");
    }elsif ($value eq "NAME"){
      my $VALUE = InternalVal($device,$value,($value." error"));
      $VALUE =~ s/$old/$new/g;
      fhem("rename $device $VALUE");
    }else{
      my $VALUE = AttrVal($device,$value,($value." error"));
      $VALUE =~ s/$old/$new/g;
      fhem("attr $device $value $VALUE");
    }
  }
}
sub count_struct {
  fhem("set Licht_Structure saveStructState status"); # Status der structure in das reading 'status' sichern
  my @count = (ReadingsVal('Licht_Structure','status','') =~ /on/g); # zählen, wie häufig 'off' im reading 'status' vorkommt
  return @count; # Anzahl ausgeben
}

1;


wo liegt der Fehler?

im logfile steht
[Fri Feb 16 22:14:56 2018] fhem.pl: Subroutine modify redefined at ./FHEM/99_myUtils.pm line 19.
[Fri Feb 16 22:14:56 2018] fhem.pl: Subroutine count_struct redefined at ./FHEM/99_myUtils.pm line 39.
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: betateilchen am 17 Februar 2018, 10:46:17
Die Meldungen sind keine Fehler, sondern schlichtweg völlig korrekte Logeinträge beim reload der 99_myUtils.pm.
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 17 Februar 2018, 11:23:39
Ok, danke. Aber wieso wird dann kein reading status erstellt?


Gesendet von iPhone mit Tapatalk
Titel: Antw:Structure: Anzahl selber Zustand zählen
Beitrag von: choetzu am 25 Februar 2018, 15:27:53
Zitat von: choetzu am 17 Februar 2018, 11:23:39
Ok, danke. Aber wieso wird dann kein status reading?
Bettateilchen, kannst du mir hier einen Tipp geben? Danke