Hallo,
wir haben bei uns unterschiedliche Fensterbeschattung. Zum einen Fenster mit normalen Rollos und zum anderen einige Fenster mit Raffstores.
Fenster 1-4 Raffstores
Fenster 5 Rolladen
Fenster 6 Rolladen
Nun gehe ich jeden morgen durch die Wohnung und kippe die Lamellen von Fenster 1-4 ein bisschen und lasse den Rolladen von Fenster 5 komplett hochfahren. Das nervt natürlich. Fenster 6 bleibt unberührt (da Schlafzimmer) und wird erst deutlich später von mir hochgefahren. Per Hand (also Knopfdruck an jedem Fenster).
Nun ist ja FHEM im Haus und ich will in das ganze ein bisschen Logik bringen. Wenn Fenster 1-5 komplett gleich wären, wäre das ja überhaupt kein Problem. Ich hab aber ja schon wieder die Besonderheit, dass ich Fenster 1-4 nur die Lamellen auf 25% kippen lassen möchte und Fenster 5 aber komplett öffnen soll.
Alles z.B. bei Sonnenaufgang, oder ab einem bestimmten Luxwert von meiner Wetterstation (muss ich noch überlegen, was mehr Sinn macht). Wenn ich dann morgens aus dem Schlafzimmer komme, sind die Fenster schon entsprechend in der richtigen Position und es ist nicht mehr so dunkel. Außerdem muss ich nicht alles per Hand machen.
Ich stelle mir nur die Frage, wie ich das Projekt am besten angehe. Bilde ich z.B. für Fenster 1-4 eine Gruppe und lasse Fenster 5 komplett außen vor und behandel Fenster 5 alleine ?
Oder sollte man alles in eine Gruppe fassen (Fenster 1-5) und dann dort nur unterschiedliche Befehle einbringen (Fenster 5 komplett öffnen, die anderen nur Lamellen auf 25%).
Der einfacherer Weg ist wahrscheinlich die unterschiedlichen Fenster zu trennen, oder ?
Ich will mir halt FHEM auch nicht unnötig zuballern.
Wie würdet ihr da dran gehen ?
Grüße,
Visionsurfer
Ich würde pro Wohnung/Hausseite eine structure machen. Aber nur wo die Geräte gleich sind. Das eine Gerät kannst du ja gesondert machen.
Deine ganze Konstruktion nimmt langsam ziemlich an Größe an. Überlege ob da nicht eine 99_myUtils vielleicht besser wäre. Sicherlich kommt später noch Beschattung hinzu oder Rolladen runter bei Sturm und so ne Sachen. Am besten gleich richtig Anfangen bevor daraus ellenlange DOIF Geschichten werden.
Hi,
wie jetzt schon Größe ? Nicht wirklich. Ich finde das ist nur der Anfang, um zu üben und warm zu werden.
Ich habe hier 320 qm voller Technik, die ich nun in Form bringen will. Da sollen noch dutzende Sachen kommen. Klar auch sowas wie "bei Sturm dann XY".
Außerdem will ich noch einiges an "Szenen" bilden. Also TV, Kochen, Essen usw.
Dazu sollen dann auch noch solche Sachen wie "Waschmaschine" fertig, "Post im Briefkasten" usw. kommen.
Als erstes muss ich aber noch mehr "Grundlagen" verstehen. Wie kann ich das alles miteinander verknüpfen. Wie du ja selbst gesagt hast, es gibt wohl immer verschiedene Wege zum Ziel.
Ich muss mir auch noch eine saubere Bezeichnung der Devices und Räume usw. überlegen. Also alles Schritt für Schritt. Als erstes versuche ich die Sachen anzugehen, die mich schon seit Monaten nerven. Ich hasse Lichtschalter zu drücken oder grundsätzlich schalter. Daher will ich so viel wie es geht, Automatik und Logik reinbringen.
Ich hoffe ja auch sehr das nächste Woche endlich Alexa kommt und dann schon bald jemand die deutsche Alexa in FHEM einbindet und das ganze per Sprache zu steuern geht. Sinnvoll meine ich.
Grüße,
Visionsurfer
Ok machen wir es mal anders. Ich beschreibe mal kurz wie ich das habe bei mir. Vielleicht hilft das ja.
Es ist ein etwas älterer Text, mittlerweile sind hundert Sachen dazu gekommen.
Zitat
Ich möchte Euch gerne einen typischen Tag von mir beschreiben. Ich besitze eine Hausautomation. Nennen wir sie der einfachheithalber Sam.
Um 5 Uhr beginnt mein Tablet an der Wand im Schlafzimmer mir eine Weckmusik zu spielen. Die Musik selbst kommt von Google Music, das Abspielen wurde von Sam angestoßen. Kurz Zeit sich noch mal zu strecken, in 2 Minuten geht im Flur, im Bad, in der Küche und im Wohnzimmer das Licht an. In der Heizsaison hat Sam bereits eine Stunde vor dem aufstehen die Wohnung vorgeheißt. Im Wohnzimmer wird mir über mein Tablet und einer Bluetoothbox von Sam angesagt wie heute die Tiefst- und Höchsttemperatur wird und wie die Wetteraussicht. Ich mache mich fertig und verlasse dann das Haus. Da sonst noch niemand anderes aufgestanden ist, schaltet Sam nach 5 Minuten Abwesenheit das Licht in der Wohnung wieder aus. Die Heizung wird nicht runter gedreht da Sam weiß das die anderen Familienmitglieder noch schlafen und nicht das Haus verlassen haben.
In der Zwischenzeit ist der Wecker meine Großer angesprungen, vorgeheißt werden musste nicht da Sam weiß das ich bereits aufgestanden bin. Somit wird lediglich zur Weckzeit die Musik bei ihr abgespielt und 2 Minuten später die Lichter im Bad, Flur Küche und Wohnzimmer angemacht. Die Schreibtischlampe im Jugendzimmer simuliert einen Sonnenaufgang und meine Große steht auf. Da sie immer leicht ab zu lenken ist startet 15 Minuten bevor sie das Haus verlassen muß ein Countdown, welcher erst eine grüne Farbe dann eine gelbe und zum Schluß eine rote Farbe ihrer Nachttischlampe anzeigt. Spätestens jetzt sollte sie das Haus verlassen haben.
Wie gesagt das ist nur ein kleines Beispiel.
Größere Sachen verarbeite ich in 99_myUtils Subroutinen. So habe ich zum Beispiel eine 99_myUtils für die Heizungssteuerung, eine weitere für die Lichtsteuerung.
Morgens geht bei mir automatisch das Licht an wenn der erste auf steht, abhängig davon ob Kind oder Elternteil. Wenn es draußen hell genug ist geht das Licht aus und zwar überall.
Abends geht das Licht hell an wenn es draußen zu dunkel wird und ab 20 Uhr kommt eine bestimmte Lichtszene und ab 21 Uhr eine andere.
Grüße
Genau so stelle ich mir das auch vor.
Wir sind noch zu zweit, daher habe ich im Augenblick einen anderen Bedarf. Aber trotzdem sehr geil.
Na vielleicht seid Ihr ja irgendwann zu dritt. Mein Kurzer ist 3 und immer wenn wir ihn Abends fertig machen wollen wird das Badezimmer vorgeheizt. Einfach per Sprache. Wenn die Tür oder ein Fenster im Bad auf ist gibt es eine Durchsage. Wenn vorgeheizt wird und jemand lässt dann die Tür auf oder macht ein Fenster auf gibt es auch eine Durchsage ;D
Hi,
ich habe noch kurz eine Frage. Kann man eigentlich dann auch mehrere DOIF Abfragen einrichten.
Also ich brauche ja morgens eine DOIF und vielleicht möchte ich dann am Abend auch unter gewissen Umständen die Jalousien wieder schließen. Dann brauch ich für Abends noch ein ?
Sehe ich das richtig ?
Grüße,
Visionsurfer
Ich liebe diese Durchsagen für jeden Blödsinn... "Schlummermusik für 30 Minuten aktiviert" . ;D
Wenn meine (Hintergrund-)Beschallung an ist, erfolgt die Ausgabe darüber; andernfalls über das RSS-Tablet in der Küche.
Hi Visionsurfer,
du kannst dazu 2 DOIF machen oder beides in eins packen, irgendwann wird es halt unübersichtlich ;-)
Nach und nach wirst du eh Vorlieben für gewisse Module entwickeln. AT, Notify und DOIF können/machen so ziemlich das gleiche. Sind aber auch in den Feinheiten unterschiedlich zu "programmieren"
Ich hab beruflich den SPS Hintergrund arbeite also lieber mit WENN DANN SONST (DOIF) als mit Perlcode ;-)
Am Anfang hab ich alles mit Dummys erschlagen, ähnlich wie der Merker bei der SPS, Dummy1 schreibt in Dummy2 der dann in Dummy3 etc. kann man machen wird hier wohl auch teils belächelt.
Aktuell nutze ich z.B. einen Dummy als Übergruppe und die dazugehörigen weiteren Dummys schreiben in dessen Userreadings. Vermutlich wäre auch das einfacher mit Pearl direkt zu lösen. Mich dort reinzuarbeiten fehlt mir aber aktuell die Zeit ;-)
Grüße
Achim
Hi,
ok. Muss ich mir mal anschauen. WIe gesagt brauche ich wahrscheinlich etwas für z.B. morgens und am Abend will ich auch noch mal was schalten. Da ich noch komplett am Anfang stehe, weiß ich noch nicht wie der beste Weg ist.
Wenn ich dann z.B. im Raum Wohnzimmer 2 DOIF haben, erkennt FHEM dann, wann er was machen muss ? Klar, anhand der Uhrzeit oder andere Werte, dann muss aber im Hintergrund immer ziemlich viel überwacht werden.
Ich will halt z.B. erreichen das morgens die Jalousien in eine gewisse Position fahren und am Abend sich wieder schließen. Das ganze wahrscheinlich an irgendwelche Werte gekoppelt (Helligkeit Uhrzeit usw.). Hier muss ich noch rausbekommen, welche Werte Sinn machen. Wahrscheinlich am besten die Helligkeit von meiner Wetterstation auf dem Dach.
Grüße,
Visionsurfer
Ja, schlussendlich muss FHEM alle Device überwachen, deswegen kommen z.B. Fritz boxen mit FHEM wohl recht schnell an ihre Grenzen, sprich sie werden langsam. Ich hab hier nen Pi 2 und noch läuft er anstandslos, trotz Dutzender at doif notify etc.
Gesendet von meinem SM-P605 mit Tapatalk
ok. Bei mir läuft es auf einem neuen Pi3, dann sollte es hoffentlich erst mal passen.
Werde gleich heute Abend mal weiter probieren.
Grüße,
Visionsurfer
Jungs, ich wollte das gerade mal schnell programmieren. Ich hab alle meine Rolläden nun in FHEM drin. Jetzt kann ich mit der Logik beginnen.
Für mich kam jetzt aber noch mal der Gedanke auf, ob ich besser ein NOTIFY oder ein DOIF nutze ?
Wenn ich morgens z.B. um 6:40 die Rolladen hochfahren lassen möchte, reicht doch ein NOTIFY ? Weil ich will den Rolladen ja dann tagsüber da stehen lassen und vielleicht abends in einen anderen Zustand bringen ?
Weil ein DOIF ist doch eher ein wenn dann und wenn nicht, dann Befehl ?
So könnte ich ja sicherlich in ein NOTIFY auch einbauen wenn Helligkeit von Wetterstation XY dann Rolladen hoch. Oder geht das nicht in ein NOTIFY ?
Weil normal wollte ich ein DOIF machen ? Ich stelle mir nur gerade die Frage, wie das Ende aussieht.
define rolladen_morgens DOIF ([wetterstation_helligkeit] > 5) (set rolladen value 0) DOELSE (?????????????)
Was macht man nach DOELSE ?
Grüße,
Visionsurfer
Moin,
nach DOELSE ist ende, willst das von Abends noch mit reinpacken dann doif. ....DOELSEIF. ....DOELSE
Gesendet von meinem SM-P605 mit Tapatalk
Moin,
ok. Also brauche ich normal nach DOELSE nichts weiter einfügen ? Oder muss das zwangsweise so aussehen ?
define rolladen_morgens DOIF ([wetterstation_helligkeit] > 5) (set rolladen value 0) DOELSE (set rolladen value 100)
Passiert es dann aber nicht, das der Rolladen automatisch schließt, wenn Licht unter 5 ist ?
Ich will ja einfach nur, das erst mal nur meine Morgenroutine abgearbeitet wird. Was ich am Abend machen will, weiß ich noch nicht. Daher soll er nicht zwangsweise am Abend automatisch wieder schließen, wenn Licht kleiner 5 ist.
Also kann man das nach dem DOELSE einfach weg lassen ?
Grüße,
Visionsurfer
ich steuere meine ganzen Szenen am Morgen über RESIDENTS bzw. ROOMMATE mit dem zugehörigem Wecker. Ist vllt. am Anfang etwas komplex, aber wenn man sich da einmal reingearbeitet hat, dann läuft das 1a und ist vor allem gut zu erweitern.
http://www.fhemwiki.de/wiki/Weckautomation
define rolladen_morgens DOIF ([wetterstation_helligkeit] > 5 and [rolladen:value]>0 ) (set rolladen value 0)
attr do always
würdest du das do always weg lassen, dann wird das doif nur ein einziges mal ausgeführt
Gruß Michael
Hi,
ok. Muss ich mir mal anschauen. Was besser ist.
Aber bei deinem Beispiel mit dem Code, ist jetzt hinten das Value falsch, oder ? Value 0 und Value 0 passt dann nicht ? :) Morgens soll der Rolladen ja aufgeben und nicht schließen.
Ah so und dann muss immer bei solchen Definitionen ein attr da always dran ? Ich dachte der hört halt im Hintergrund immer mit und wenn die Werte wieder passen, dann führt es es automatisch aus. Täglich.
Weil im Badezimmer hab ich z.B. ein DOIF gebaut, was eine Lampe schaltet, aber nur wenn Helligkeit unter einem Wert ist und Bewegungsmelder eine Bewegung erkennt. Da hab ich auch kein attr do always drin. Sondern das läuft einfach so und so wie ich mir das vorstelle.
Grüße,
Visionsurfer
Zitat von: l2r am 25 Oktober 2016, 08:47:07
define rolladen_morgens DOIF ([wetterstation_helligkeit] > 5 and [rolladen:value]>0 ) (set rolladen value 0)
attr do always
würdest du das do always weg lassen, dann wird das doif nur ein einziges mal ausgeführt
Gruß Michael
Das stimmt nicht. do always ist hier nicht sinnvoll, weil Helligkeit zyklisch sendet.
Ohne do always, wird erst wieder der Befehl ausgeführt, wenn die Bedingung zwischendurch nicht wahr war, dann gibt es hier einen Zustandswechsel zu cmd_2 und das Modul ist "scharfgestellt" für eine erneute Ausführung.
Gruß
Damian
Hi,
ok. Gut das wir noch mal drüber gesprochen haben. Hatte mich wieder ganz durcheinander gebracht :) Ich hätte es nämlich ohne gemacht.
Aber Value 0 und Value 0 stimmt trotzdem nicht, oder ?
Grüße,
Visionsurfer
Zitat von: Damian am 25 Oktober 2016, 09:39:14
Das stimmt nicht. do always ist hier nicht sinnvoll, weil Helligkeit zyklisch sendet.
Ohne do always, wird erst wieder der Befehl ausgeführt, wenn die Bedingung zwischendurch nicht wahr war, dann gibt es hier einen Zustandswechsel zu cmd_2 und das Modul ist "scharfgestellt" für eine erneute Ausführung.
Gruß
Damian
cmd_2 gibt's doch gar nicht, da ich das doelse weggelassen habe?! Deshalb habe ich ja value>0 eingebaut, damit der nur dann set value 0 ausführt, wenn die Rolladen unten sind (also nicht value 0 haben).
oder ich bin grade nicht auf dem aktuellen Stand was DOIF angeht...
@l2r
ok. Stimmt. Jetzt hab ich es auch verstanden warum 0 und 0 da steht. 0 ist ja = offen, 100 = geschlossen.
ok. Also braucht man dann doch dein attr ?
Grüße,
Visionsurfer
der Meinung bin/war ich zumindest.
Da Damian aber den Entwickler von DOIF ist, will ich mich da nicht zu weit aus dem Fenster lehnen... ;)
Hi,
oh ja stimmt. Sehe ich auch gerade.
Na ich würde sagen, ich probiere es heute Abend mal aus. Morgen früh werden wir es sehen.
Bzw. irgendwo hatte ich gelesen das man dann das Ereigniss ja auch irgendwie simulieren kann. Also so tun als ob schon Helligkeit einen bestimmten Wert erreicht hat ?
Muss ich noch mal suchen. Dann kann ich es auch schon vorher testen. Wobei live ist immer besser :)
Grüße,
Visionsurfer
Hi,
zum simulieren, erstelle nen dummy, statt deinem helligkeitssensor, den dummy ins doif, und den dummy auf die wunschwerte setzen. Ich hab z.b. nen dummy_test und ein doif _ test um neue Sachen zu probieren ohne das gleich was ausgelöst wird, was die Familie iritiert ;-)
Grüße
Achim
Gesendet von meinem SM-P605 mit Tapatalk
Zitat von: l2r am 25 Oktober 2016, 10:20:27
cmd_2 gibt's doch gar nicht, da ich das doelse weggelassen habe?! Deshalb habe ich ja value>0 eingebaut, damit der nur dann set value 0 ausführt, wenn die Rolladen unten sind (also nicht value 0 haben).
oder ich bin grade nicht auf dem aktuellen Stand was DOIF angeht...
ohne do always gibt es einen imaginären DOELSE-Fall. D. h.
DOIF (...)(set ...) ist das Gleiche wie DOIF (...)(set ...) DOELSE
Wenn die Bedingung nicht wahr ist, gibt es den cmd_2-Zustand, ob man möchte oder nicht. Das ist auch wichtig damit ein Zustandswechsel hervorgerufen wird und die ganzen Beispiele in der Commandref ohne do always auch sinnvoll funktionieren.
Wenn do always gesetzt wird, gibt des dagegen den cmd_2-Zustand nicht, wenn kein DOELSE angegeben ist.
Das ist auch so in der Commandref beschrieben und hat eine bestimmte Vorgeschichte, die aber hier nicht wichtig ist.
Gruß
Damian
Hi,
ok. Danke für deine Antwort. Dann lasse ich das Always erst mal weg. Bin gerade heim gekommen und werde nun mal weiter an den Fall gehen :)
Danke schon mal an alle für die tolle Unterstützung.
Grüße,
Visionsurfer
Hi,
kann es sein das dieser Code hier falsch war ?
define rolladen_morgens DOIF ([wetterstation_helligkeit] > 5 and [rolladen:value]>0 ) (set rolladen value 0)
Ich hab das zuerst so gemacht:
define rolladen_morgens DOIF ([wetterstation_helligkeit] > 5 and [rollo_lounge:value]>0 ) (set rollo_lounge value 0 g1)
Das funktionierte nicht. Irgendwas war falsch mit [rollo_lounge:value]
Ich hab es nun so gemacht:
define rolladen_morgens DOIF ([wetterstation_helligkeit] > 5 and [rollo_lounge]>0 ) (set rollo_lounge value 0 g1)
Dann hab ich mir einen Dummy gemacht und anstatt wetterstation_helligkeit den Dummy eingesetzt. Den Dummy hab ich dann einfach mal auf 7 gesetzt und schon ist mein Rolladen hochgefahren. Damit scheint es also zu klappen.
Grüße,
Visionsurfer
Dann gibt es das Reading value für das Device rollo_lounge wohl nicht.
Jungs tut mir leid, ich muss euch noch mal nerven.
Also für mein Rolladen hab ich das ja nun wie oben beschrieben hinbekommen. Scheint auch zu klappen.
@CoolTux:
Doch schau mal das Reading value gibt es:
Internals:
DEF 2/3/4:dpt5.001 2/1/4:dpt1.008 2/2/4:dpt1.008 2/3/104:dpt5.001
DEVNAME rollo_lounge
IODev KNX
KNX_MSGCNT 8
KNX_RAWMSG C1107w236800
KNX_TIME 2016-10-25 20:01:48
LASTInputDev KNX
MSGCNT 8
NAME rollo_lounge
NR 340
NTFY_ORDER 50-rollo_lounge
STATE 0 %
TYPE KNX
Gaddr:
1 2/3/4
2 2/1/4
3 2/2/4
4 2/3/104
Gcode:
1 2304
2 2104
3 2204
4 2368
Model:
1 dpt5.001
2 dpt1.008
3 dpt1.008
4 dpt5.001
Readings:
2016-10-25 19:07:05 getG2 up
2016-10-25 19:07:05 getG3 up
2016-10-25 20:01:48 getG4 0 %
2016-10-25 20:01:48 last-sender 1/1/7
2016-10-25 20:01:26 setG1 0 %
2016-10-25 20:00:32 setG2 down
2016-10-25 19:46:41 setG3 down
2016-10-25 19:47:56 setG4 50 %
2016-10-25 20:01:48 state 0 %
2016-10-25 19:36:35 value 0
Readingsname:
Attributes:
IODev KNX
eventMap /value 100% g2:Ab/on g3:Stop/value 0% g2:Auf/value 30% g1:Pos1/value 50% g1:Pos2
room Lounge
webCmd Ab:Stop:Auf:Pos1:Pos2
Nun wollte ich das 1:1 auf meine Raffstores kopieren.
Ich habe vorher eine Gruppe meiner 3 Fenster mit den Raffstores gebildet.
Das ganze sieht so aus:
Internals:
ATTR room
DEF room rollo_kueche rollo_essen_alle rollo_tv
NAME raffstores_alle
NR 417
NTFY_ORDER 50-raffstores_alle
STATE Ab
TYPE structure
Content:
rollo_essen_alle undefined
rollo_kueche 100 %
rollo_tv 100 %
Readings:
2016-10-25 20:23:28 LastDevice rollo_essen_alle
2016-10-25 20:23:28 LastDevice_Abs rollo_essen_links
2016-10-25 20:26:03 state value 100% g2
Attributes:
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 Gruppen
webCmd Ab:Stop:Auf:Pos1:Pos2:Pos3
Mich wundert schon mal, warum es hier kein Reading Value gibt. Es gibt nur das Reading State. Alle Angaben sind eigentlich so eingetragen wie auch bei meinen Rolladen. Total komisch.
Das Problem ist das bei dem Reading "state" mal 100% steht und mal "value 100% g2". Wenn nur sauber 100% drin steht, dann funktioniert es hiermit sofort:
define raffstores_morgens DOIF ([wetterstation_helligkeit] > 10 and [raffstores_alle]>0 ) (set raffstores_alle value 25 g4)
So sieht mein List für das DOIF aus:
Internals:
CFGFN
DEF ([dummy_test] > 10 and [raffstores_alle]>0 ) (set raffstores_alle value 25 g4)
NAME raffstores_morgens
NR 1619
NTFY_ORDER 50-raffstores_morgens
STATE cmd_2
TYPE DOIF
Readings:
2016-10-25 20:43:59 Device raffstores_alle
2016-10-25 20:41:09 cmd 2
2016-10-25 20:41:09 cmd_event dummy_test
2016-10-25 20:41:09 cmd_nr 2
2016-10-25 20:43:21 e_dummy_test_STATE 30
2016-10-25 20:43:59 e_raffstores_alle_STATE Ab
2016-10-25 20:41:09 state cmd_2
Condition:
0 InternalDoIf($hash,'dummy_test','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) > 10 and InternalDoIf($hash,'raffstores_alle','STATE','','',AttrVal($hash->{NAME},'notexist',undef))>0
Devices:
0 dummy_test raffstores_alle
all dummy_test raffstores_alle
Do:
0:
0 set raffstores_alle value 25 g4
1:
Helper:
event Ab
globalinit 1
last_timer 0
sleeptimer -1
timerdev raffstores_alle
timerevent Ab
triggerDev raffstores_alle
timerevents:
Ab
timereventsState:
state: value 100% g2
triggerEvents:
Ab
triggerEventsState:
state: value 100% g2
Internals:
0 dummy_test:STATE raffstores_alle:STATE
all dummy_test:STATE raffstores_alle:STATE
Itimer:
Readings:
Regexp:
0:
All:
State:
Trigger:
Attributes:
room Gruppen
Sorry das ich euch hier so zuspamme, aber ich komme leider nicht weiter. Kann mir jemand auf die Sprünge helfen ?
Wo ist da der Wurm drin.
Grüße,
Visionsurfer
Moin,
also mein Rolladen hat heute morgen wunderbar automatisch geöffnet, als es draußen hell wurde. Läuft perfekt wie gewünscht.
Nur die Raffstores bekomme ich nicht hin, weil die irgendwie komische Werte zurück geben, wo ich nicht weiß wie ich das abbilden kann. Außerdem glaube ich festgestellt zu haben, das die mal "ab", mal "value 100% g2" und mal "100%" als state schreiben.
Wenn ich z.B. alle Raffstores runterfahre und dann danach noch mal auf "stop" drücke, steht einfach nur "stop" da. Ich hatte gehofft das dann noch kurzer Zeit der Wert wieder auf 100% springt. Tut es aber nicht.
Man soll es ja mit stateRegex eventuell beeinflussen können. Aber das attr hab ich nicht verstanden, obwohl ich mir die Wiki schon 3 mal durchgelesen habe.
Keine Ahnung wie man dann dort auch "stop" wieder 100% machen kann.
Grüße,
Visionsurfer
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
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
@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 (http://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
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
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
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
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
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?!?
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
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