[gelöst] Verständigungsfrage Trigger

Begonnen von choetzu, 04 Juni 2018, 19:59:37

Vorheriges Thema - Nächstes Thema

choetzu

hallo,

ich habe folgendes DOIF. Das DOIF sollte bewirken, dass wenn die Aussentemp > 23 oder Bürotemp >26 ist (=Trigger) die Aussenrolladen runtergehen. Vorausgesetzt es ist zwischen 10-20.30 uhr, Sommer-Storen-Dumm ist auf on, und die Bürostore ist nicht schon "closed", sowie cmd ist nicht 1.

Hmm, eigentlich doch einfach. Doch heute habe ich aufgrund eines Gewitters die Storen hochgemacht. Dabei war cmd_nr 1. Also sollten doch die Storen nciht wieder runtergehen, bevor es um Mitternacht auf cmd_2 wechselt. Wieso ging es trotzdem runter?  Ich weiss grad keinen Rat..

([?10:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and [?Buero_ST_FSB61] ne "closed"
and ([PoolController:Pool_Aussen_Num]  > 23
or [Netatmo_Buero:temperature] > 26)
and [?$SELF:cmd_nr] ne "1")
(set Buero_ST_FSB61 closes)
(set Spiri_St_FSB61 closes)

DOELSEIF
([00:00])
()
Raspi3, EnOcean, Zwave, Homematic

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

here we go, buah ist der lang.. und soviel chinesisch. ;)

Internals:
   CHANGED   
   DEF        ([?10:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and [?Buero_ST_FSB61] ne "closed"
and ([PoolController:Pool_Aussen_Num]  > 23
or [Netatmo_Buero:temperature] > 26)
and [?$SELF:cmd_nr] ne "1")
(set Buero_ST_FSB61 closes)
(set Spiri_St_FSB61 closes)

DOELSEIF
([00:00])
()
   MODEL      FHEM
   NAME       TEMP_Storen_Buero_Spiri_Sommer_DOIF
   NR         185
   NTFY_ORDER 50-TEMP_Storen_Buero_Spiri_Sommer_DOIF
   STATE      disabled
   TYPE       DOIF
   READINGS:
     2018-06-04 19:45:39   Device          PoolController
     2018-06-04 18:42:52   cmd             1.2
     2018-06-04 18:42:52   cmd_event       Netatmo_Buero
     2018-06-04 18:42:52   cmd_nr          1
     2018-06-04 18:42:52   cmd_seqnr       2
     2018-06-04 19:44:51   e_Netatmo_Buero_temperature 26.1
     2018-06-04 19:45:39   e_PoolController_Pool_Aussen_Num 19.44
     2018-06-04 19:47:34   last_cmd        disabled
     2018-06-04 19:47:34   mode            disabled
     2018-06-04 19:47:34   state           disabled
     2018-06-03 20:30:00   timer_01_c01    04.06.2018 10:00:00
     2018-06-03 20:30:00   timer_02_c01    04.06.2018 20:30:00
     2018-06-04 00:00:00   timer_03_c02    05.06.2018 00:00:00
     2018-06-04 18:42:52   wait_timer      no timer
   Regex:
   condition:
     0          DOIF_time($hash,0,1,$wday,$hms)  and InternalDoIf($hash,'Sommer_Storenzeit_Dummy','STATE') eq "on" and InternalDoIf($hash,'Buero_ST_FSB61','STATE') ne "closed" and (ReadingValDoIf($hash,'PoolController','Pool_Aussen_Num')  > 23 or ReadingValDoIf($hash,'Netatmo_Buero','temperature') > 26) and ReadingValDoIf($hash,'TEMP_Storen_Buero_Spiri_Sommer_DOIF','cmd_nr') ne "1"
     1          DOIF_time_once($hash,2,$wday)
   days:
   devices:
     0           PoolController Netatmo_Buero
     all         PoolController Netatmo_Buero
   do:
     0:
       0          set Buero_ST_FSB61 closes
       1          set Spiri_St_FSB61 closes
     1:
       0         
     2:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      Fluss_MS: 5.91 cm/s,Aussen: 19.44 °C,pH: 7.30 pH,Fluss: 5.27 m³/h,Druck: 536.96 mBar,Pool_Temp_Num: 26.12,Pool_Aussen_Num: 19.44
     globalinit 1
     last_timer 3
     sleepdevice Netatmo_Buero
     sleepsubtimer -1
     sleeptimer -1
     timerdev   PoolController
     timerevent Fluss_MS: 6.05 cm/s,Aussen: 22.12 °C,pH: 7.30 pH,Fluss: 5.12 m³/h,Druck: 534.54 mBar,Pool_Temp_Num: 26.19,Pool_Aussen_Num: 22.12
     triggerDev PoolController
     timerevents:
       Fluss_MS: 6.05 cm/s
       Aussen: 22.12 °C
       pH: 7.30 pH
       Fluss: 5.12 m³/h
       Druck: 534.54 mBar
       Pool_Temp_Num: 26.19
       Pool_Aussen_Num: 22.12
     timereventsState:
       Fluss_MS: 6.05 cm/s
       Aussen: 22.12 °C
       pH: 7.30 pH
       Fluss: 5.12 m³/h
       Druck: 534.54 mBar
       Pool_Temp_Num: 26.19
       Pool_Aussen_Num: 22.12
     triggerEvents:
       Fluss_MS: 5.91 cm/s
       Aussen: 19.44 °C
       pH: 7.30 pH
       Fluss: 5.27 m³/h
       Druck: 536.96 mBar
       Pool_Temp_Num: 26.12
       Pool_Aussen_Num: 19.44
     triggerEventsState:
       Fluss_MS: 5.91 cm/s
       Aussen: 19.44 °C
       pH: 7.30 pH
       Fluss: 5.27 m³/h
       Druck: 536.96 mBar
       Pool_Temp_Num: 26.12
       Pool_Aussen_Num: 19.44
   internals:
     0           Sommer_Storenzeit_Dummy:STATE Buero_ST_FSB61:STATE
     all         Sommer_Storenzeit_Dummy:STATE Buero_ST_FSB61:STATE
   interval:
     0          -1
     1          0
   intervalfunc:
   intervaltimer:
   itimer:
   localtime:
     0          1528099200
     1          1528137000
     2          1528149600
   perlblock:
   readings:
     0           PoolController:Pool_Aussen_Num Netatmo_Buero:temperature
     all         PoolController:Pool_Aussen_Num Netatmo_Buero:temperature
   realtime:
     0          10:00:00
     1          20:30:00
     2          00:00:00
   time:
     0          10:00:00
     1          20:30:00
     2          00:00:00
   timeCond:
     0          0
     1          0
     2          1
   timer:
     0          0
     1          0
     2          0
   timers:
     1           2
   trigger:
   triggertime:
     1528137000:
       localtime  1528137000
       hash:
     1528149600:
       localtime  1528149600
       hash:
   uiState:
   uiTable:
Attributes:
   alias      Sommer Store Büro Spiri DOIF
   event-on-change-reading state
   group      06_Temp
   icon       black/svg/thermometer-1
   room       01_Automatisierung
   wait       300
Raspi3, EnOcean, Zwave, Homematic

amenomade

#3
Kann nichts feststellen. Bist Du sicher, dass cmd_nr tatsächlich bei 1 war?

Dein DOIF ist disabled. Hast Du etwas, dass dein DOIF mit "set DOIFname disable" und vielleicht dann "set DOIFname initialize" steuert? Dann wäre cmd_nr nicht 1

Wann hast Du die Storen hochgemacht, und waren die auf "closed"?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

Zitat von: amenomade am 04 Juni 2018, 20:44:04
Kann nichts feststellen. Bist Du sicher, dass cmd_nr tatsächlich bei 1 war?

Dein DOIF ist disabled. Hast Du etwas, dass dein DOIF mit "set DOIFname disable" und vielleicht dann "set DOIFname initialize" steuert? Dann wäre cmd_nr nicht 1

Wann hast Du die Storen hochgemacht, und waren die auf "closed"?

danke für deine hilfe

ja ich bin mir ziemlich sicher, dass cmd_nr auf 1 war..100% aber doch nicht.. vielleicht 80%
ich habe es manuell disabled weil ein Hagelgewitter aufkam und ich nicht riskieren wollte, dass sie wieder runtergehen.
ich habe es so um 19.40 Uhr hochgefahren und ja, damals waren Sie auf "closed".
Raspi3, EnOcean, Zwave, Homematic

amenomade

Hmmm. Weitere Tests wären interessant. Wie gesagt, ich kann mir es nur erklären, wenn cmd_nr nicht auf 1 war. Ich habe jetzt es selbst auf einer Testinstallation simuliert... geht einfach wie gewünscht.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

auch ich bin ratlos..
darf ich fragen, wie du eine solche Situation simulierst?
Raspi3, EnOcean, Zwave, Homematic

amenomade

Mit Dummies und set / setreading Kommandos
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Per

Zitat von: choetzu am 04 Juni 2018, 21:19:29ich habe es manuell disabled
Nach dem enablen hatte es cmd_1? Nicht vllt. 0? Lässt sich ja schnell nachstellen.

choetzu

#9
hallo zusammen,

ich glaube, ich habe den Fehler gefunden --> Meine Frau!! Also war ich mit meiner Annahme, dass es auf cmd_nr 1 war, doch vermutlich falsch.

und zwar kam das so: Am morgen hat meine Frau die Rolläden manuell (macht man doch nicht mehr ;) per Taster runtergelassen. Somit war es immer noch auf cmd_nr 2 vom Vorabend. Als ich nach hause kam, dachte ich, dass die Rolläden von selber (also cmd_nr 1) runter gegangen sind. Als das Gewitter kam, hat meine Frau die Rolläden hochgemacht per Taster, und somit blieb es immer noch bei cmd_nr 2. Weil die Temperatur noch > 23 war, sind sie dann wieder automatisch runter cmd_nr 1... bäng..

Damit das nicht mehr vorkommt, habe ich das DOIF angepasst, bin aber noch nicht sicher, ob es wirklich geht. Tests sind schonmal vielversprechend:

([?10:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and [Buero_ST_FSB61:"down"])
()

DOELSEIF
([?10:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and [?Buero_ST_FSB61:position] < 80
and ([PoolController:Pool_Aussen_Num]  > 23
or [Netatmo_Buero:temperature] > 26)
and [?$SELF:cmd_nr] !~ '^(1|2)$')
(set Buero_ST_FSB61 closes)

DOELSEIF
([00:00])
()


Also, sollte meine Frau manuell runterlassen --> cmd 1
Wenn sie wieder hochmacht und wieder runter und wieder hoch und wieder runter --> cmd 1 . Um Mitternacht gehts dann wieder auf cmd 3
Wenn meine Frau nicht runterlässt und die Temperaturschwelle überschritten wird --> cmd 2.
Wenn man dann manuell eingreift, bleibt es bei --> cmd 2

So bin ich safe. oder sehe ich etwas nicht?

Und dann noch eine "letzte" Frage:

Ich möchte dies bei all meinen Rolladen (11 Stück) machen. Aber ich möchte den Code nur einmal nutzen. Wie kann man das nun so gestalten, dass man nicht bei allen 10 Rolläden oben stehende Code reinmachen muss? Sub in MyUtils?
Raspi3, EnOcean, Zwave, Homematic

Per

Zitat von: choetzu am 05 Juni 2018, 21:33:28Ich möchte dies bei all meinen Rolladen (11 Stück) machen. Aber ich möchte den Code nur einmal nutzen. Wie kann man das nun so gestalten, dass man nicht bei allen 10 Rolläden oben stehende Code reinmachen muss? Sub in MyUtils?
Wenn alle auf die gleichen Trigger reagieren sollen, kannst du es in ein DOIF schreiben (evtl. mit FILTER und User-/DOIFReading). Sonst gibt es div. Möglichkeiten, für myUtils sehe ich aber zuwenig Perl.

[?$SELF:cmd_nr] !~ '^(1|2)$'
2 ist überflüssig wg. fehlendem do always
[?$SELF:cmd_nr] <> 1

amenomade

Zitat von: choetzu am 05 Juni 2018, 21:33:28
Und dann noch eine "letzte" Frage:

Ich möchte dies bei all meinen Rolladen (11 Stück) machen. Aber ich möchte den Code nur einmal nutzen. Wie kann man das nun so gestalten, dass man nicht bei allen 10 Rolläden oben stehende Code reinmachen muss? Sub in MyUtils?
Das Problem: dein DOIF reagiert auf cmd_nr. Aber jedes Gerät wäre in der Lage dies zu ändern. => Deine Sequenz Logik musst Du mit user-/DOIFReadings statt $SELF:cmd_nr umbasteln, wie von Per geschrieben.

Zitat von: Per am 05 Juni 2018, 22:58:11
[?$SELF:cmd_nr] <> 1
<> als Vergleichsoperator? In Perl?  :o ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

Zitat von: amenomade am 06 Juni 2018, 08:22:27
Das Problem: dein DOIF reagiert auf cmd_nr. Aber jedes Gerät wäre in der Lage dies zu ändern. => Deine Sequenz Logik musst Du mit user-/DOIFReadings statt $SELF:cmd_nr umbasteln, wie von Per geschrieben.

super, danke per und amenomade... Eine Hürde genommen, die nächste steht an.. :)

Ich muss mich da in user/DOIFReadings (gibts DOIFReading überhaupt?) einlesen.. Sehe grad die Lösung nicht, wie man das machen muss...
Raspi3, EnOcean, Zwave, Homematic

amenomade

Damit meinte ich ganz normale Readings, die man mit setreading auf dem DOIF setzt.

Somit muss dein DOIF den Zustand von den jeweiligen  Geräte merken (und testen).
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

hmm, ich komm etwas an meine Grenzen.

Zitat von: amenomade am 06 Juni 2018, 08:22:27
Deine Sequenz Logik musst Du mit user-/DOIFReadings statt $SELF:cmd_nr umbasteln, wie von Per geschrieben.

Sequenzlogik? Das klingt gut, aber für mich etwas schwierig nach zuvollziehen. Wenn du mit Sequenz den Befehlsabschnitt (set...) meinst, dann kann ich es irgendwie nachvollziehen.

Ich habs mal versucht, aber noch nicht getestet, da ich unterwegs bin. Könnte das so gehen? Oder völlig auf dem Holzpfad?

([?10:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and [.*_ST_.*:"down"]
        and [$device:DOIFReading] ne "1")
(set $device DOIFReading 1)

DOELSEIF
([?10:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and [?.*_ST_.*:position] < 80
and ([PoolController:Pool_Aussen_Num]  > 23
or [Netatmo_Buero:temperature] > 26)
and [?(set $DEVICE:DOIFReading] !~ '^(1|2)$')
(set $device closes)
                       (set $device DOIFReading 2)

DOELSEIF
([00:00])
Raspi3, EnOcean, Zwave, Homematic

amenomade

#15
Eher sowas in der Art: https://fhem.de/commandref_DE.html#DOIF_Fenster_offen_Meldung

So ein DOIF triggert auf alle "battery" Events, egal das Device, und dann Speichert den Zustand "low" oder "ok" des jeweiligen Device in einem Reading B_<devicename> des DOIFs selbst. Und dieses Reading wird auch in der Bedingung geprüft.

Du hast das umgekehrt gemacht: statt ein Reading des DOIFs pro Device, hast Du ein Reading DOIFreading auf jedem Device gesetzt. Könnte auch gehen, aber Du hast nicht alles unten den Augen zum Testen. Wenn alles auf dem DOIF ist, kannst Du sofort sehen, welche Geräte in welcher Reihenfolge getriggert haben, und in welchem Zweig des DOIFs die gearbeitet haben.

Du warst aber auf dem guten Weg.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

#16
herzlichen dank. Ich bin der Sache auf der Spur.. Aber irgendwie komme ich nicht weiter. Alle Storen haben FSB61 im Namen, deshalb kann ich darüber filtern. Das DOIF steht immer auf INITIALIZED, auch wenn ich irgendeine Store hoch oder runtermache. Und checken kann ich ja net, weil kein device getriggert wird, oder?

Gestern noch euphorisch, heute wieder down.. ;)

([?06:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and ["^FSB61$:^up$"])
(setreading $SELF B_$DEVICE close)
(setreading $device test closes)

DOELSEIF
(["^FSB61:position"] < 80
and [?Sommer_Storenzeit_Dummy] eq "on"
and [?10:00-18:30]
and [PoolController:Pool_Aussen_Num] > 23
and [?$SELF:St_$DEVICE] ne "closed")
(setreading $SELF B_$DEVICE closed)
(setreading $device test closes)

DOELSEIF
(["^FSB61$:^up$"]
and [?$SELF:B_$DEVICE] ne "open")
(setreading $SELF B_$DEVICE open)
(setreading $device test open)


attr do always
Raspi3, EnOcean, Zwave, Homematic

amenomade

Warum auch immer, war mein Link hieroben falsch. Ich meinte dieses Beispiel:
Zitat von: CommandRefBatteriewarnung per E-Mail verschicken

define di_battery DOIF ([":battery: low"] and [?$SELF:B_$DEVICE] ne "low")
    ({DebianMail('yourname@gmail.com', 'FHEM - battery warning from device: $DEVICE')}, setreading $SELF B_$DEVICE low)
DOELSEIF ([":battery: ok"] and [?$SELF:B_$DEVICE] ne "ok")
    (setreading $SELF B_$DEVICE ok)
attr di_battery do always

Aber zurück zu deinem Doif:

and ["^FSB61$:^up$"])
Sowas triggert  auf dem Device, das genau FSB61 (nichts vorher da ^, und nichts nachher da $) heisst und wo genauso exakt "up" im Event vorkommt.

Was Du möchstest ist wahrscheinlich entweder alle Device, die im Namen FSB61 haben, dann and ["FSB61:^up$"]) oder die mit FSB61 anfangen, dann and ["^FSB61:^up$"]) oder die mit FSB61 enden, dann and ["FSB61$:^up$"])




Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

#18
Zitat von: amenomade am 07 Juni 2018, 22:54:58
Warum auch immer, war mein Link hieroben falsch. Ich meinte dieses Beispiel:
Aber zurück zu deinem Doif:

and ["^FSB61$:^up$"])
Sowas triggert  auf dem Device, das genau FSB61 (nichts vorher da ^, und nichts nachher da $) heisst und wo genauso exakt "up" im Event vorkommt.

Was Du möchstest ist wahrscheinlich entweder alle Device, die im Namen FSB61 haben, dann and ["FSB61:^up$"]) oder die mit FSB61 anfangen, dann and ["^FSB61:^up$"]) oder die mit FSB61 enden, dann and ["FSB61$:^up$"])

Herzlichen Dank. Es muss auf FSB61 enden...

Ich teste es wie folgt:
([?06:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and ["FSB61$:^down$"]
        and [$SELF:ST_$DEVICE] ne "1")
(setreading $SELF ST_$DEVICE 1)

DOELSEIF
([?10:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and [?"FSB61:position"] < 70
and ([PoolController:Pool_Aussen_Num]  > 23
or [Netatmo_Buero:temperature] > 26)
and [?$SELF:ST_$DEVICE] !~ '^(1|2)$')
          (setreading $SELF ST_$DEVICE 2)

DOELSEIF
([00:00])
(setreading $SELF ["^ST_"] 0)


mit do always. die erste Sequenz (down) konnte ich erfolgreich testen. Die zweite Sequenz (> 23) leider noch nicht. Und bei der dritten Sequenz (00:00) kommt eine Fehlermeldung.

setreading TEST_DOIF ST_S.* 0: WARNING: unsupported character in reading ST_S.* (not A-Za-z/\d_\.-)

Ich habe auch ^ und Anführungszeichen, [] etc versucht. geht wie nicht.


[?"^FSB61:position"] < 80
Und bei Sequenz 2, ist das so OK, oder muss ich da mit .* arbeiten? 
Raspi3, EnOcean, Zwave, Homematic

choetzu

hmm, ich komm da nicht weiter...

DOELSEIF
([00:00])
(setreading $SELF {(ST_.*) 0)


da kommt nun die Fehlermeldung
syntax error at (eval 390296) line 1, at EOF
Und das bedeutet nach meiner Recherche "zu wenig Klammern" (EOF). Wo will der denn noch mehr...gggrr
Raspi3, EnOcean, Zwave, Homematic

amenomade

#20
Zitat(setreading $SELF {(ST_.*) 0)

Aber ich glaube nicht, dass Du auf einmal so mehrere Readings setzen kannst. <reading> ist nicht wie <devspec>, der Filter und regex akzeptiert. Evtl musst Du hier bischen Perl schreiben.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

Zitat von: amenomade am 09 Juni 2018, 00:40:03
Aber ich glaube nicht, dass Du auf einmal so mehrere Readings setzen kannst. <reading> ist nicht wie <devspec>, der Filter und regex akzeptiert. Evtl musst Du hier bischen Perl schreiben.

danke, den KlammerFehler habe ich auch bemerkt. Geht trotzdem nicht. Ich habe gefühlte 1000 Kombinationen {|][(" etc versucht. Alles geht nicht. Und ich finde auch im Forum etc nichts ähnliches. Ich befürchte Onkel Perl muss helfen.. Den kenn ich aber brutal schlecht.. Wie kann ich dies ändern? Danke.
Raspi3, EnOcean, Zwave, Homematic

Damian

Zitat von: choetzu am 09 Juni 2018, 10:20:26
danke, den KlammerFehler habe ich auch bemerkt. Geht trotzdem nicht. Ich habe gefühlte 1000 Kombinationen {|][(" etc versucht. Alles geht nicht. Und ich finde auch im Forum etc nichts ähnliches. Ich befürchte Onkel Perl muss helfen.. Den kenn ich aber brutal schlecht.. Wie kann ich dies ändern? Danke.

setreading unterstützt offenbar keine regex für Readingnamen, das Setzen der einzelnen Readings  musst du dann explizit mit mehreren setreading-Aufrufen regeln.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

choetzu

Danke.  Dann muss ich einen anderen Weg finden. Vermutlich muss ich die Readings in den entsprechenden Devices schreiben anstelle DoifReadings.. zurück auf Feld 1 ;)
Raspi3, EnOcean, Zwave, Homematic

Per

Zitat von: Damian am 09 Juni 2018, 10:42:25
setreading unterstützt offenbar keine regex für Readingnamen
setreading nicht, aber deletereading (wenn ich mich nicht irre). Und ob 0 oder Nul ;) ist relativ egal und lässt sich abfangen.

amenomade

Also... mit bisschen Perl auch nicht so kompliziert: auf Basis foreach in $defs{$SELF}{READINGS} o.ä. Kann im Moment aber nicht entwickeln/testen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

DOELSEIF
([00:00])
{ my $readings = $defs{$SELF}->{READINGS};  for my $key (keys %$readings) {fhem("setreading $SELF $key 0") if $key =~ "ST_.*";} }
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

wow, super, das funktioniert bestens. Herzlichen Dank. Ich habe es Testweise mal so gemacht.

([?06:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and ["FSB61$:^down$"]
        and [$SELF:ST_$DEVICE] !~'^(1|2)$')
(setreading $SELF ST_$DEVICE 1)

DOELSEIF
([?10:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and [?"FSB61:position"] < 70
and ([PoolController:Pool_Aussen_Num]  > 23
or [Netatmo_Buero:temperature] > 26)
and [?$SELF:ST_$DEVICE] !~ '^(1|2)$')
          (setreading $SELF ST_$DEVICE 2)

DOELSEIF
([00:00])
{ my $readings = $defs{$SELF}->{READINGS};  for my $key (keys %$readings) {fhem("setreading $SELF $key 0") if $key =~ "ST_.*";} }


cmd_1 klappt, cmd_3 nun auch. Doch wird cmd_2 mit
and [?"FSB61:position"] < 70
auch klappen? Wenn ja, dann werde ich nebst den Setreadings noch close-/open Befehle ergänzen.

danke nohcmals.. super..
Raspi3, EnOcean, Zwave, Homematic

amenomade

Zitat von: choetzu am 11 Juni 2018, 23:20:34
Doch wird cmd_2 mit
and [?"FSB61:position"] < 70
auch klappen?

Nö, das finde ich komisch. Hast Du jetzt ein Device, das "FSB61" heisst? Dann mit [?FSB61:position] testen.
Aber wenn Du auf Events von mehreren Devices triggern möchtest, wird es nicht sauber mit [PoolController:Pool_Aussen_Num] oder [Netatmo_Buero:temperature] kombiniert.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

Zitat von: amenomade am 11 Juni 2018, 23:34:22
Nö, das finde ich komisch. Hast Du jetzt ein Device, das "FSB61" heisst? Dann mit [?FSB61:position] testen.
Aber wenn Du auf Events von mehreren Devices triggern möchtest, wird es nicht sauber mit [PoolController:Pool_Aussen_Num] oder [Netatmo_Buero:temperature] kombiniert.

hmm, hier will ich eigentlich einen Zustand und keinen Event abfragen. Also, wenn [PoolController:Pool_Aussen_Num] oder [Netatmo_Buero:temperature] triggert soll mit and [?"FSB61:position"] < 70 gecheckt werden, bei welchen Rolladen mit FSB61 im Namen die Position < 70 ist. Es triggert also keinen Event sondern einen Zustand/Reading.  Das  [?"FSB61$:position"] < 70 triggert doch einen Event, oder geht das auch beim Zustand?
Raspi3, EnOcean, Zwave, Homematic

Per

Zitat von: choetzu am 12 Juni 2018, 07:45:08Das  [?"FSB61$:position"] < 70 triggert doch einen Event, oder geht das auch beim Zustand?
Das ? triggert gar nix (dafür ist es ja da) und in Kombination mit Event kommt nix Gescheites raus. Und Zustände kannst du nicht generalisieren.

choetzu

Zitat von: Per am 12 Juni 2018, 11:17:58
Das ? triggert gar nix (dafür ist es ja da) und in Kombination mit Event kommt nix Gescheites raus. Und Zustände kannst du nicht generalisieren.

jep, klar. sorry, falsch ausgedrückt. Ich will dies auch nicht triggern. Sondern wenn es draussen zu warm ist, sollen all diejenigen Rolläden runter, welche weniger als 70% geschlossen sind. und um diesen Check geht es bei [?"FSB61$:position"] < 70. Aber, wenn ich dich richtig verstanden habe, dann geht das nicht so.. Wie denn?
Raspi3, EnOcean, Zwave, Homematic

amenomade

Ne, so geht das nicht.

? am Anfang = abfragen, nicht triggern. Wenn es aber nicht triggert, kommt aber auch das Device nicht in $DEVICE
"" = Event Syntax. Das hat aber keinen Sinn, ? und "" zu kombinieren. Was wäre der Zustand eines Events? Und wenn < 70 noch dazu kommt, wird es noch sinnloser.

Ich vermute, Du muss hier wieder auf Perl Ebene gehen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Per

Zitat von: amenomade am 12 Juni 2018, 11:44:52Ich vermute, Du muss hier wieder auf Perl Ebene gehen.
Oder mal im Klartext sagen, was er damit bezwecken will.
Denn eine Liste mit allen Rollos ("FSB61") und Position > 70 bekommt DOIF ja noch alleine hin (#).

amenomade

Vermutlich will er sowas machen, aber nicht nur für Büro, sondern für alle Rolladen mit einem einzigen DOIF:

([?10:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and [Buero_ST_FSB61:"down"])
()

DOELSEIF
([?10:00-20:30]
and [?Sommer_Storenzeit_Dummy] eq "on"
and [?Buero_ST_FSB61:position] < 80
and ([PoolController:Pool_Aussen_Num]  > 23
or [Netatmo_Buero:temperature] > 26)
and [?$SELF:cmd_nr] !~ '^(1|2)$')
(set Buero_ST_FSB61 closes)

DOELSEIF
([00:00])
()


Und wir sind jetzt bei Zweig 2
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

Die Vermutung ist definitiv richtig [emoji6] Zweig 1 und 3 gehen dank Euch. Nun sollte noch Zeig 2 gehen, damit das Kunstwerk vollendet ist.. [emoji6]
Raspi3, EnOcean, Zwave, Homematic

amenomade

DOELSEIF
([?10:00-20:30] and [?Sommer_Storenzeit_Dummy] eq "on" and ([PoolController:Pool_Aussen_Num]  > 23 or [Netatmo_Buero:temperature] > 26))
{my $readings = $defs{$SELF}->{READINGS};
for my $key (keys %$readings) {
if ($key =~ /ST_(.*)/) {
my $device = $1;
if ([?$device:position] < 70 and [?$SELF:ST_$device] !~ '^(1|2)$' ) {
fhem("setreading $SELF $key 2")
}
}
}

Nicht getestet
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

super, herzlichen Dank.  Es geht noch nicht, es fehlt irgendwo noch ein right bracket.. weiss jedoch nicht wo, hab alles mögliche probiert.

no right bracket: {my $readings = $defs{TEST_DOIF}->{READINGS};

danke nochmals..
Raspi3, EnOcean, Zwave, Homematic

amenomade

Einfach am Ende
DOELSEIF
([?10:00-20:30] and [?Sommer_Storenzeit_Dummy] eq "on" and ([PoolController:Pool_Aussen_Num]  > 23 or [Netatmo_Buero:temperature] > 26))
{my $readings = $defs{$SELF}->{READINGS};
for my $key (keys %$readings) {
if ($key =~ /ST_(.*)/) {
my $device = $1;
if ([?$device:position] < 70 and [?$SELF:ST_$device] !~ '^(1|2)$' ) {
fhem("setreading $SELF $key 2")
}
}
}
}
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

danke. Das DOIF motzt zwar nicht mehr, aber dafür werden seit heute Morgen folgende Fehlermeldungen angezeigt, in regelmässigen Abständen.. Um diese Uhrzeit habe ich eine Store runtergelassen und dann wieder hoch... evtl. erklärt das irgendwas.. ;)

.06.13 10:30:02 1: ERROR evaluating {my $readings = $defs{TEST_DOIF}->{READINGS}; for my $key (keys %$readings) { if ($key =~ /ST_(.*)/) { my $device = $1; if ( < 70 and  !~ '^(1|2)$' ) { fhem("setreading TEST_DOIF $key 2") } } }: Unterminated <> operator at (eval 359768) line 1.

2018.06.13 10:30:02 2: TEST_DOIF: {my $readings = $defs{TEST_DOIF}->{READINGS}; for my $key (keys %$readings) { if ($key =~ /ST_(.*)/) { my $device = $1; if ( < 70 and  !~ '^(1|2)$' ) { fhem("setreading TEST_DOIF $key 2") } } }: Unterminated <> operator at (eval 359768) line 1.

2018.06.13 10:30:17 3: EnOcean set Buero_St_FSB61 closed
2018.06.13 10:30:21 1: ERROR evaluating {my $readings = $defs{TEST_DOIF}->{READINGS}; for my $key (keys %$readings) { if ($key =~ /ST_(.*)/) { my $device = $1; if ( < 70 and  !~ '^(1|2)$' ) { fhem("setreading TEST_DOIF $key 2") } } }: Unterminated <> operator at (eval 359877) line 1.

2018.06.13 10:30:21 2: TEST_DOIF: {my $readings = $defs{TEST_DOIF}->{READINGS}; for my $key (keys %$readings) { if ($key =~ /ST_(.*)/) { my $device = $1; if ( < 70 and  !~ '^(1|2)$' ) { fhem("setreading TEST_DOIF $key 2") } } }: Unterminated <> operator at (eval 359877) line 1.

2018.06.13 10:30:21 1: ERROR evaluating {my $readings = $defs{TEST_DOIF}->{READINGS}; for my $key (keys %$readings) { if ($key =~ /ST_(.*)/) { my $device = $1; if ( < 70 and  !~ '^(1|2)$' ) { fhem("setreading TEST_DOIF $key 2") } } }: Unterminated <> operator at (eval 359900) line 1.

2018.06.13 10:30:21 2: TEST_DOIF: {my $readings = $defs{TEST_DOIF}->{READINGS}; for my $key (keys %$readings) { if ($key =~ /ST_(.*)/) { my $device = $1; if ( < 70 and  !~ '^(1|2)$' ) { fhem("setreading TEST_DOIF $key 2") } } }: Unterminated <> operator at (eval 359900) line 1.

2018.06.13 10:35:02 1: ERROR evaluating {my $readings = $defs{TEST_DOIF}->{READINGS}; for my $key (keys %$readings) { if ($key =~ /ST_(.*)/) { my $device = $1; if ( < 70 and  !~ '^(1|2)$' ) { fhem("setreading TEST_DOIF $key 2") } } }: Unterminated <> operator at (eval 360392) line 1.

2018.06.13 10:35:02 2: TEST_DOIF: {my $readings = $defs{TEST_DOIF}->{READINGS}; for my $key (keys %$readings) { if ($key =~ /ST_(.*)/) {
Raspi3, EnOcean, Zwave, Homematic

amenomade

Stattif ([?$device:position] < 70 and [?$SELF:ST_$device] !~ '^(1|2)$', versuch mal mitif (ReadingsVal("$device", "position", 100) < 70 and ReadingsVal("$SELF", "ST_$device", 2) !~ '^(1|2)$'

Die default Werte 100 und 2 sind evtl. anzupassen: ich weiss nicht, was in deinem Fall am besten funktioniert, die Bedingung lieber wahr oder lieber falsch zu haben.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

choetzu

Du bist mein Held, amenomade! Dankeeee.. Es klappt seit heute Morgen bestens. Ich beobachte weiter.

Ich versuch mal den perl code zu verstehen..
Raspi3, EnOcean, Zwave, Homematic