Morgendliche Routine automatisieren - Eure Meinung ?

Begonnen von visionsurfer, 23 Oktober 2016, 20:06:48

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Ich empfehle dringend, das nicht mit einem FHEM-Skript zu machen - das wird auf Dauer viel zu kompliziert und ist nicht wartbar.

Bei mir machen das verschiedene Perl-Programme:
- Für Spracherkennung
- Für die Überprüfung von Fenstern und Türen
- Für die Sprachausgabe
- Für die Feststellung des Tagesstatus morgen (Arbeitstag, Feiertag, Wochenende, Ferientag) und Einstellung der Default-Weckzeit

Diese interagieren mit einem zentralen "Housemaster".

Nur mal ein Use-Case: Wird nach 21:30 das Licht im Wohnzimmer komplett ausgeschaltet, wird die morgige Weckzeit angesagt und man wird daran erinnert, das Teewasser aufzusetzen (das dann natürlich morgens fünf Minuten nach dem Weckzeitpunkt zum Kochen kommt). Will man die Weckzeit ändern, geht dies per Sprachbefehl am wandhängenden Tablet. Ach ja, und es wird abends dann beim Ausschalten des Lichtes die Zirkulationspumpe noch für 10 Minuten angeschaltet, so dass auf jeden Fall sofort heißes Wasser an allen Zapfstellen da ist.

LG

pah

visionsurfer

Hi Pah,

ok. Leuchtet mir grundsätzlich ein.

Das Problem ist nur, ich hab erst mal keine Ahnung von Perl und weiß auch noch nicht wie ich das zentral machen kann. Also so wie von dir beschrieben.

Auf der anderen Seite, möchte ich natürlich erst mal sehen, was geht und wie das so grundsätzlich funktioniert. Kennst du vielleicht, ich freu mich dann immer wie ein Schneekönig, wenn quasi morgens dann die Jalousien hoch fahren.

Als Anfänger, bleibt einem fast gar nichts anderes übrig, als so erst mal zu starten.

Eigentlich funktioniert es ja auch perfekt. Wenn als Wert sauber 100% oder halt 0% im status steht, klappt es auch mit den Raffstores sofort. Hab ich mit einem dummy getestet. Ich hab halt noch nicht rausbekommen, warum ich immer mal wieder unterschiedliche Werte da stehen habe. Entweder ist mein KNX Bus nicht schnell genug oder ich habe die einzelnen Fenster, die ich ja als Gruppe gebildet habe, falsch angelegt oder oder oder ? Da bin ich noch nicht dahinter gekommen und suche jetzt erst mal einen Weg, damit das funktioniert.

Wenn ich mal so ein paar Sachen am laufen habe, wollte ich in Phase zwei, mich mehr damit beschäftigen, wie ich das alles zentraler und besser pflegbarer programmieren kann.

Eventuell ist das nicht gerade der beste Weg, wenn ich mich damit zuerst beschäftigt, dann sehe ich erst mal noch eine Weile nie ein Ergebnis und das ist schlecht fürs ego :)

Grüße,
Visionsurfer

l2r

@visionsurfer:

so ähnlich habe ich das auch gemacht als Anfänger und würde es auch zum erlernen von FHEM immer wieder so machen. Es ist natürlich nicht der effizienteste und sauberste Weg, das ist klar. Und ich habe auch nicht nur einmal meine komplette oder große Teile meiner Config neu gemacht, weil ich wieder einen Weg gefunden habe Probleme eleganter und zentraler zu lösen. Am Ende kommt man dann auf ähnliche Ergebnisse wie von pah.

Außerdem entwickelt sich FHEM ja auch mit rasanter Geschwindigkeit weiter, sodass es irgendwann sowieso zu besseren Lösungen kommt, als zu der, die es momentan gibt und man dann (sofern man es natürlich möchte) sowieso seine Config wieder umbaut. Gerade da steckt für mich ja auch der Reiz von FHEM, dass es ein dauerhaftes Projekt ist, wo es quasi jeden Tag etwas neues zu entdecken gibt.

Zu deinem Problem:
lies die nochmal die CommandRef von structure durchhttp://fhem.de/commandref_DE.html#structure

ich nutze keine structure, aber probier mal bei den Mitgliedern der structure das attribut <struct_type>_map auf vlaue zu setzen. Dann sollte deine Structure nur noch die Werte von Value anstatt die states der einzelnen Mitglieder verwenden:
attr rollo_kueche raffstores_alle_map value


Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

visionsurfer

Hallo Michael,

ok. Danke für deinen Hinweis. Schau ich mir an.

Was mich nur wundert, hier mal ein Beispiel von einem Raffstore. Dort hab ich gar kein Value Wert. Es gibt keinen Eintrag Value:


Internals:
   DEF        2/3/8:dpt5.001 2/1/8:dpt1.008 2/2/8:dpt1.008 2/4/8:dpt5.001 2/3/108:dpt5.001
   DEVNAME    rollo_tv
   IODev      KNX
   KNX_MSGCNT 6
   KNX_RAWMSG C1107w236cff
   KNX_TIME   2016-10-25 20:49:54
   LASTInputDev KNX
   MSGCNT     6
   NAME       rollo_tv
   NR         341
   NTFY_ORDER 50-rollo_tv
   STATE      down
   TYPE       KNX
   Gaddr:
     1          2/3/8
     2          2/1/8
     3          2/2/8
     4          2/4/8
     5          2/3/108
   Gcode:
     1          2308
     2          2108
     3          2208
     4          2408
     5          236c
   Model:
     1          dpt5.001
     2          dpt1.008
     3          dpt1.008
     4          dpt5.001
     5          dpt5.001
   Readings:
     2016-10-25 19:07:05   getG3           up
     2016-10-25 20:49:54   getG5           100 %
     2016-10-25 20:49:54   last-sender     1/1/7
     2016-10-25 20:50:59   setG2           down
     2016-10-25 21:38:10   setG3           down
     2016-10-25 20:50:23   setG4           25 %
     2016-10-25 21:38:10   state           down
   Readingsname:
Attributes:
   IODev      KNX
   eventMap   /value 100% g2:Ab/on g3:Stop/value 0% g2:Auf/value 25% g4:Pos1/value 50% g4:Pos2/value 75% g4:Pos3
   room       TV
   userattr   room_map structexclude
   webCmd     Ab:Stop:Auf:Pos1:Pos2:Pos3


Oder verstehe ich da was falsch. In anderen Geräten sehe ich auch ein "Value". Das steht z.B. auf 0 oder auf was auch immer. Aber in dem hier beschriebenen Beispiel, hab ich das nicht.

Grüße,
Visionsurfer

l2r

ahh ok, jetzt hab ichs verstanden ;-)

also musst du dir über ein userreading für vlaue den Passenden Wert für value zusammenbauen und kannst den dann verwenden.

Ich habe KNX-Devices nicht im Einsatzt. gibt es ein Reading das eindeutig die Position bestimmt? Weil so wie ich das im Moment sehe nimmt state nur den Wert des letzten Befehls an, was erklären würde warum du immer unterschiedliche Werte bekommst?!

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

visionsurfer

Hi,

ja genau.

Ich muss wahrscheinlich erst mal meine KNX Rolläden so einstellen das immer die richtigen Werte angezeigt werden. Im KNX Bereich hab ich diesbezüglich schon ein Thread gestartet. Da hab ich auch schon eine Info bekommen.

Wie du sagst, es stehen halt immer unterschiedliche Werte drin. Wenn ich z.B. beim hoch und runter fahren, zwischendurch auf STOP klicke, ist halt der letzte Wert "stop". Damit kann ich nichts anfangen. Ich muss das System erst mal so überzeugen, das er z.B. anstatt stop dann einfach die Position in % anzeigt, also z.B. 30%. Wenn ich das irgendwie einheitlich hinbekomme, müsse auch alles andere funktionieren.

Hoffe ich zumindest.

Grüße,
Visionsurfer

visionsurfer

Hi,

so ich bin der Sache zu Hause noch mal auf den Grund gegangen und eventuell eine Problematik festgestellt.

Mein KNX Device rollo_tv, besteht ja auch verschiedenen Gruppenadressen. Also für auf und ab, stop, position in %, status in % und aber auch der Position der Lamellen.

Hier liegt eventuell das Problem. Ich will ja nicht das ganze Rollo öffnen, sondern nur die Lamellen kippen. Also in meinem Fall G4 in eine Position bringen.

Bei einem normalen Rollo geht ja nur hoch, runter, stop. Bei meinem Raffstore geht aber hoch, runter, stop und Lamellen Kippen.

Im State kann ja eigentlich immer nur ein Wert stehen. Entweder die Position vom Rolladen allgemein oder halt die Position der Lamellen.

Wenn ich z.B. folgendes ausführe:

set rollo_tv value 50 g4

Dann werden die Lamellen gedreht. Im State steht dann mal nur "50%" und manchmal auch "value 50% g4".

Als Anlage mal ein Bild zum verdeutlichen.

Grüße,
Visionsurfer








l2r

hast du bei deinen einzelnen raffstorres ein reading für g4 welches den aktuellen zustand von g4 anzeigt?


bzw wenn ich dich richtig verstanden habe, dann brauchst du nicht g4 sonder g3 für den gesamtstatus?!?
Wissen ist Macht.
Ich weiß nix.
Macht nix.

visionsurfer

Hi,

ich habe das noch mal Schritt für Schritt umgebaut und wirklich alle meine KNX Werte eingetragen die ich pro Fenster habe und erhalte.
Das sieht nun so aus:


Internals:
   DEF        2/3/107:dpt5.001 2/4/107:dpt5.001 2/3/7:dpt5.001 2/4/7:dpt5.001 2/1/7:dpt1.008 2/2/7:dpt1.008
   DEVNAME    rollo_essen_links
   IODev      KNX
   KNX_MSGCNT 14
   KNX_RAWMSG C1107w246bff
   KNX_TIME   2016-10-26 19:31:28
   LASTInputDev KNX
   MSGCNT     14
   NAME       rollo_essen_links
   NR         313
   NTFY_ORDER 50-rollo_essen_links
   STATE      25 %
   TYPE       KNX
   Gaddr:
     1          2/3/107
     2          2/4/107
     3          2/3/7
     4          2/4/7
     5          2/1/7
     6          2/2/7
   Gcode:
     1          236b
     2          246b
     3          2307
     4          2407
     5          2107
     6          2207
   Model:
     1          dpt5.001
     2          dpt5.001
     3          dpt5.001
     4          dpt5.001
     5          dpt1.008
     6          dpt1.008
   Readings:
     2016-10-26 19:29:12   getG1           100 %
     2016-10-26 19:31:28   getG2           100 %
     2016-10-26 18:45:58   getG5           100 %
     2016-10-26 19:31:28   last-sender     1/1/7
     2016-10-25 19:07:05   setG1           98 %
     2016-10-26 18:45:00   setG2           down
     2016-10-26 18:44:38   setG3           down
     2016-10-26 19:29:44   setG4           25 %
     2016-10-26 19:30:30   setG5           down
     2016-10-26 19:27:57   setG6           down
     2016-10-26 19:16:23   state           25 %
   Readingsname:
Attributes:
   IODev      KNX
   eventMap   /value 100% g5:Ab/on g6:Stop/value 0% g5:Auf/value 25% g4:Pos1/value 50% g4:Pos2/value 75% g4:Pos3
   room       Essen
   stateCmd   {sprintf("%s %s", ReadingsVal($name,"g1-get","")), ReadingsVal($name,"g2-get",""))}
   userattr   room_map structexclude
   webCmd     Ab:Stop:Auf:Pos1:Pos2:Pos3


Durch eine Unterstützung von einem anderen User, hab ich in den Readings nun immer getG1 und getG2 stehen. G1 ist der Positionsstatus vom gesamten Rolladen und G2 ist der Positionsstatus von den Lamellen. In dem Beispiel hier, ist bei mir gerade alles dicht. Rolladen zu und Lamellen auch.

Das steht jetzt immer in den Readings. Damit müsste man dann was anfangen können, oder ? Weil diese beiden Readings kann ich ja dann immer anfragen und erhalte somit einen sauberen Wert wie gerade die Situation vom meinem Fenster ist.

Was mich nur stutzig macht ist der STATE. Da steht halt immer irgendein letzter Wert drin. Grundsätzlich bekomme ich da ja wahrscheinlich auch nicht 2 Werte rein.

Ich hoffe das ich jetzt verständlich erklärt habe. Kann man damit was anfangen, schon, oder ?

Grüße,
Visionsurfer

visionsurfer

Moin,

ich habe das nun noch mal heute früh angeschaut. In den Readings habe ich nun immer getG1 und getG2 drin. Also kann ich ja sicherlich diese Readings dann auslesen und mir auch für die Raffstores eine Morgenroutine bauen.

Nach dem Motto: Wenn getG1 = 100% und getG2 = 100%, dann set value 50 GXY.

So müsste ein Schuh draus werden ? :)

Grüße,
Visionsurfer