komplexe Situationen - Wie löst ihr das?

Begonnen von DanielGab, 19 Juli 2017, 13:58:43

Vorheriges Thema - Nächstes Thema

DanielGab

Hallo lieber Leser
ich hab da mal ne allgemeine Frage an FHEM-Nutzer:

Momentan benutze ich verschiedene Bereich in meinem FHEM und habe verschiedene DOIF-Gruppen. Eigentlich funktioniert alles ganz gut, aber manchmal kaufe ich doch ein neues Gerät und das will dann natürlich auch in meine Befehle eingepflegt werden.

Ich werde mal konkret:
Grundsteuerung regelt je ein DOIF für Rollos, Licht und Heizung
Dummysteuerung regelt die Dummies
Feinsteuerung regelt Kleinigkeiten, wie angelernte Fernbedienungen, Mail-Notifies usw.
Sonos regelt mit verschiedenen DOIFs alles rund um Sonos (Anrufe, Wecker, Gruppierungen usw)

Die Grundsteuerung regelt also mit einem DOIF die Rollos. Dieses DOIF hat nun seine 43 CMDs und funktioniert eigentlich recht gut. Ich habe die CMDs in einer Tabelle in Word erfasst. In der ersten Spalte sind die WAITs, in der zweiten die DEF.

Nun habe ein neues Gerät, einen Fenster-Drehgriff-Schalter. Also muss die DOIF Rollos angepasst werden. Damit vergrößert sie sich gleich mal um den Faktor 2., also 86 CMDs und ich will gar nicht drüber nachdenken, was passiert wenn mein Garten Smart wird...exponentielles Wachstum eben  :-\ Da sind Fehler bei mir vorprogrammiert

Nun habe ich über eine Excel-Tabelle nachgedacht, mit der ich einfach über Word und einen Serienbrief neue DOIFs erstellten kann...aber das war auch nur ein Gedanke. Ich weiß nicht ganz genau, ob das klappt könnte. Muss da mal weiter drüber nachdenken. Ein paar Kleinigkeiten habe ich wohl mit PERL realisieren können, aber das fällt mir doch sehr sehr schwer.

Nun zu meiner Frage an die Leser
Wie regelt ihr denn komplexe Situationen und behaltet damit den Überblick über DOIFs?
Welche Tricks bzw. Programme habt Ihr dafür?

Viele Grüße,
Daniel

rabehd

 :o Es gibt Bereiche? Bei mir nur Räume.

Mir scheint das Konzept/Verständnis passt nicht.
ZitatDie Grundsteuerung regelt also mit einem DOIF die Rollos. Dieses DOIF hat nun seine 43 CMDs
Für mich ist jedes CMD ein Zustand und da fallen mir keine 43 Verschiedenen ein.

Meine Empfehlung: Lesen, Konzept überdenken, Strukturen nutzen.

Ein Tip aus der Softwareentwicklung: Schreibe mal die einzelnen UseCase auf und setzte die nacheinander um.
Auch funktionierende Lösungen kann man hinterfragen.

DeeSPe

Bei mir regeln so wenig wie möglich notify(s) so viel wie nur geht.
Generische Namen helfen mir dabei den Überblick zu behalten und nicht immer wieder neu programmieren zu müssen.

Alle meine "echten" Geräte beginnen immer mit dem Kürzel für den Raum:

  • bz - Badezimmer
  • ku - Küche
  • fl - Flur
  • sz - Schlafzimmer
  • wz - Wohnzimmer
  • bk - Balkon
  • ga - Garten

Danach folgt ein Unterstrich und danach eine Bezeichnung für die Art des Devices, gefolgt von einer hochzählenden Nummer (falls mehrere Geräte der selben Art vorhanden sind):

  • SD - Steckdosen
  • Licht - Lichter
  • Sensor - Sensoren

Zusammen ergibt das dann Geräte nach dem folgenden Namensschema:
bz_SD1
ku_Licht1
wz_Sensor1


Bei meinen Bewegungsmeldern weiß ich z.B. dass diese alle "_Sensor1" mit vorangestelltem Raumkürzel heißen.
Der Trigger für ein notify, welches alle BWMs abdeckt, könnte dann so aussehen:
([bsw]z|fl|ku)_Sensor1:state:.*

Wenn bei mir ein neues Gerät einer bereits vorhandenen Art dazu kommt, so wird der Zähler einen hochgezählt! Alle anderen notify/readingsGroup/usw. sind bereits so generisch aufgebaut dass die hinzugekommenen Devices automatisch mit abgedeckt werden.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DanielGab

Zitat von: rabehd am 19 Juli 2017, 14:11:07
:o Es gibt Bereiche? Bei mir nur Räume.

Mir scheint das Konzept/Verständnis passt nicht.Für mich ist jedes CMD ein Zustand und da fallen mir keine 43 Verschiedenen ein.

Meine Empfehlung: Lesen, Konzept überdenken, Strukturen nutzen.

Ein Tip aus der Softwareentwicklung: Schreibe mal die einzelnen UseCase auf und setzte die nacheinander um.

Ja, der Raum heisst Steuerung  ;D
Und von da aus werden dann die Rollos, das Licht usw. gesteuert.

Ich meine mit den CMDs die 43 möglichen Bedingungskombinationen, die momentan in der Rollo-DOIF eintreten können. Meinst Du das mit UseCase?

Status: home short long schlafen aufstehen schlummern Frühdienst
Helligkeit: hell dunkel dämmer Mdämmer
Sonnenstand: Küche Garten Dunkel
Beschattung: Sun noSun
TV: on off
Aussentemperatur: warm kühl
Terasse: auf zu kipp


klar überschneidet sich da einiges, aber doch nicht so viel wie ich mir wünschen würde.

DanielGab

#4
Zitat von: DeeSPe am 19 Juli 2017, 14:18:02
Bei mir regeln so wenig wie möglich notify(s) so viel wie nur geht.
Generische Namen helfen mir dabei den Überblick zu behalten und nicht immer wieder neu programmieren zu müssen.

find ich gut, habe ich auch so gemacht.

Zitat von: DeeSPe am 19 Juli 2017, 14:18:02
Wenn bei mir ein neues Gerät einer bereits vorhandenen Art dazu kommt, so wird der Zähler einen hochgezählt! Alle anderen notify/readingsGroup/usw. sind bereits so generisch aufgebaut dass die hinzugekommenen Devices automatisch mit abgedeckt werden.

Wie genau sieht das dann bei Dir aus? Bei mir sind hinzukommende Devices auch so abgedeckt, aber Ich habe eigentlich gar keine notifies oder readingGroups. Alles ist mit DOIF geregelt.

z.B.

(([Status] eq "schlummern" or [Status] eq "Frühdienst") and
   [Sonnenschutz] eq "Küche" and [OGRollo] eq "off")
(set RolloEG scene Sun_Küche)
(set RolloUG scene auf)

DOELSEIF (([Status] eq "schlummern" or [Status] eq "Frühdienst") and
   [Sonnenschutz] eq "Küche" and [OGRollo] ne "off")
(set RolloOG scene zu)
(set RolloEG scene Sun_Küche)

DOELSEIF (([Status] eq "schlummern" or [Status] eq "Frühdienst") and
   [Sonnenschutz] eq "Garten" and [OGRollo] eq "off" and [EG_Tuer_Zustand] eq "auf")
(set RolloEG scene Sun_Garten_Home)
(set RolloUG Schlitze)

DOELSEIF (([Status] eq "schlummern" or [Status] eq "Frühdienst") and
   [Sonnenschutz] eq "Garten" and [OGRollo] eq "off" and [EG_Tuer_Zustand] ne "auf")
(set RolloEG scene Sun_Garten_Home_Tuer_zu)
(set RolloUG Schlitze)

usw. usw.

DeeSPe

Für r
Zitat von: DanielGab am 19 Juli 2017, 14:32:01
Wie genau sieht das dann bei Dir aus? Bei mir sind hinzukommende Devices auch so abgedeckt, aber Ich habe eigentlich gar keine notifies oder readingGroups. Alles ist mit DOIF geregelt.

Für readingsGroup benutze ich z.B. statt der Namen der Devices einen Devspec anhand der modelId.

Der Trigger für ein notify welches alle Steckdosen abdeckt könnte z.B. so aussehen:
([bsw]z|fl|ku)_SD[1-9]:state:.*

Kommt dann eine bisher nicht vorhandene Steckdose mit Namen wz_SD8 hinzu, so wird diese bereits von dem Trigger mit abgedeckt.

Gruß
Dan

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

rabehd

Aus Deinen Parametern läßt sich was vermuten, fürs Verständnis müßte ich mehr wissen.

Du machst es Dir wohl etwas kompliziert und das wird schwierig zu warten.
Vielleicht mal: Denk einfach.

ZitatStatus: home short long schlafen aufstehen schlummern Frühdienst
Wenn sich das auf die Anwesenheit von Personen bezieht, dann wäre mir das zu differenziert, hat sich bei mir nicht bewährt.

....

Auch funktionierende Lösungen kann man hinterfragen.

DanielGab

Zitat von: rabehd am 19 Juli 2017, 15:14:38
Status: home short long schlafen aufstehen schlummern Frühdienst
Wenn sich das auf die Anwesenheit von Personen bezieht, dann wäre mir das zu differenziert, hat sich bei mir nicht bewährt.

Das hat eigentlich nix mit der Anwesenheit der Personen zu tun.

home: irgendjemand ist zu Hause.
schlafen: alle schlafen
schlummern: einer schläft
aufstehen: alle stehen gleichzeitig auf
Frühdienst: einer steht alleine auf
Short/Long: Sehr ähnlich, überschneidet sich fast immer

Und danach richtet sich dann das Verhalten der Rollos, in welchen Räumen Rollos, Licht, Heizung geschaltet oder Sprachnachrichten kommen, wer denn anruft oder wie das Wetter wird.

ZitatAus Deinen Parametern läßt sich was vermuten, fürs Verständnis müßte ich mehr wissen.

Was lässt sich da denn vermuten? Und was musst Du denn da noch wissen?

rabehd

ZitatDas hat eigentlich nix mit der Anwesenheit der Personen zu tun.

home: irgendjemand ist zu Hause.
schlafen: alle schlafen
schlummern: einer schläft
aufstehen: alle stehen gleichzeitig auf
Frühdienst: einer steht alleine auf
Short/Long: Sehr ähnlich, überschneidet sich fast immer

Für mich sind das Anwesenheits-Stati der Personen. Bei Dir von Deiner Katze?

Ich verstehe es so, dass Du bei Short/Long selbst schon nicht mehr weisst, was es bedeutet  :-[

Ich würde es Raumbezogen aufbauen, also je Raum oder sogar Rollo ein DOIF...
Auch funktionierende Lösungen kann man hinterfragen.

Beta-User

Für (HM-) Rolläden gäbe es z.B. auch andere Lösungen als ein (vermutlich schlecht wartbares) Bandwurm-DOIF.

Auch für die Anwesenheitsthemen gäbe es evtl. Module, die man einsetzen könnte.

Dass jemand zwar DOIF's mit 34 Zweigen hat, aber keine notify, finde ich auch bemwerkenswert. Da erscheint mir perl-Lernen eigentlich leichter, verbunden mit einigen wenigen generischen perl-Funktionen, aber das ist Geschmackssache.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DanielGab

Zitat von: rabehd am 19 Juli 2017, 15:48:08
Für mich sind das Anwesenheits-Stati der Personen. Bei Dir von Deiner Katze?

Ich verstehe es so, dass Du bei Short/Long selbst schon nicht mehr weisst, was es bedeutet  :-[

Ich würde es Raumbezogen aufbauen, also je Raum oder sogar Rollo ein DOIF...

Aber zum Status kommt ja dann noch der Sonnenstand, Wetter, Helligkeit, TV,
So nach dem Motto: Wenn einer schläft, dann ist das OG immer dunkel und es wird nixmehr geschaltet, aber unten wird weiter normal alles gesteuert, je nachdem wie das mit den anderen Variablen ist
Und wenn alle schlafen, dann bleiben die Rollos solange unten, bis man aufsteht, egal obs hell ist oder nicht, die Klingel bleibt aus und das Telefon leise. usw usw

Short/Long unterscheidet sich nur bei der Heizungssteuerung.

Hehe, jetzt weiß ich was mit einfach denken gemeint ist. Das fällt mir oft schwer :-)
Ich denke - soviele Möglichkeiten, die wollen auch alle genannt werden - und ab damit in die DOIF


rabehd

#11
 :o Du bist schon ein besonderer Fall.

Zu den Bereichen äußere ich mich nicht mehr, das ist egal.

Ich würde überlegen was geschalten werden soll ("Rollo-Küche"). Darauf sollte man sich konzentrieren. Die nächste Überlegung welche Änderung eines Status hat darauf Einfluß (Anwesenheit (welche), Fenster, Temperatur...). Dafür wurde ich eine Steuerung bauen, das kann ein notify sein, mir gefällt ein DOIF besser.
Im nächsten Schritt kann man überlegen welche Devices immer gemeinsam beeinflusst werden.

Das ganze Haus mit allen Devices in einem DOIF steuern kann man machen, aber warum? Wartbar ist das irgendwann nicht mehr.
Auch funktionierende Lösungen kann man hinterfragen.

DanielGab

Zitat von: Beta-User am 19 Juli 2017, 15:55:11
Für (HM-) Rolläden gäbe es z.B. auch andere Lösungen
Das finde ich sehr toll! Nur ohne Perl-Kentnisse kann ich die .pm leider nicht anpassen
Ich sollte da doch mal nen Crashkurs machen!


Zitat von: rabehd am 19 Juli 2017, 16:12:50
:o Du bist schon ein besonderer Fall.
Ich würde überlegen was sich schalten will ("Rollo-Küche"). Darauf sollte man sich konzentrieren. Die nächste Überlegung welche Änderung eines Status hat darauf Einfluß (Anwesenheit (welche), Fenster, Temperatur...). Dafür wurde ich eine Steuerung bauen, das kann ein notify sein, mir gefällt ein DOIF besser.
Im nächsten Schritt kann man überlegen welche Devices immer gemeinsam beeinflusst werden.
Das ganze Haus mit allen Devices in einem DOIF steuern kann man machen, aber warum? Wartbar ist das irgendwann nicht mehr.

Hmm, vielleicht sollte ich da mal genauer drüber nachdenken, die einzelnen Devices mit je einem DOIF versorgen. Die UseCase dürften damit sicherlich deutlich weniger werden. Aber dann habe ich so viele DOIFs

Aber bin ich so eigenartig, ich dachte das ist ganz normal, so wie ich das hier bisher geregelt habe. Und es funktioniert auch alles sehr gut und zuverlässig. Machen das wirklich alle anders? Man sagt ja, wenn alle um einen herum komisch sind, ist man es vielleicht nur selbst?

Ich hatte so die Idee, dass alle das allermeiste mit sowenigen DOIFs wie möglich regeln und dazu auch ein einfaches Wartungskonzept haben.

DeeSPe

Zitat von: DanielGab am 19 Juli 2017, 16:28:37
Das finde ich sehr toll! Nur ohne Perl-Kentnisse kann ich die .pm leider nicht anpassen
Ich sollte da doch mal nen Crashkurs machen!


Hmm, vielleicht sollte ich da mal genauer drüber nachdenken, die einzelnen Devices mit je einem DOIF versorgen. Die UseCase dürften damit sicherlich deutlich weniger werden. Aber dann habe ich so viele DOIFs

Aber bin ich so eigenartig, ich dachte das ist ganz normal, so wie ich das hier bisher geregelt habe. Und es funktioniert auch alles sehr gut und zuverlässig. Machen das wirklich alle anders? Man sagt ja, wenn alle um einen herum komisch sind, ist man es vielleicht nur selbst?

Ich hatte so die Idee, dass alle das allermeiste mit sowenigen DOIFs wie möglich regeln und dazu auch ein einfaches Wartungskonzept haben.

Machen kann das prinzipiell jeder so wie er/sie mag/kann!
Gefragt wurde aber:
ZitatWie löst ihr das?

Ein paar Beispiele dazu hast Du genannt bekommen.

Ich habe beispielsweise (fast) meine ganzen notify(s) und at(s) in ein Modul gesteckt welches sich HOMEMODE nennt. Dadurch waren/sind 90% meiner notify(s) obsolet geworden.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

rabehd

Zitatdass alle das allermeiste mit sowenigen DOIFs wie möglich regeln
Von dem Wettbewerb wußte ich noch gar nichts  >:( :).

Es soll für den Eigentümer übersichtlich, verständlich und wartbar sein. Wenn man bei 20 DOIFs einen besseren Überblick hat, dann ist es ebenso ok wie ein einzelnes, welche gut kommentiert ist.
Du musst es warten und Dein erster Post hier läßt anderes vermuten.

Ich finde es auf jeden Fall gut, dass Du Dir da Gedanken machst.
Auch funktionierende Lösungen kann man hinterfragen.