Hallo,
ich bin noch relativ neu in Fhem und habe mir nun mal ein Sonos Play 1 gegönnt 8)
Dieser steht im Moment im Bad und ist mit einem Homematic Bewegungsmelder, der zusätzlich noch 2 Tasten hat verbunden.
Sobald ich ins Bad komme, geht ein Radio sender an und geht nach 2 Minuten wieder aus, sofern keine Bewegung mehr stattgefunden hat. Dies klappt auch super! Der Taster ist dafür da, um verschiedene Spotify Playlisten abzuspielen und um den song zu skippen.
Nun hätte ich gerne, dass jeden Freitag zwischen 8 und 13:30 der Bewegungsmelder komplett deaktiviert wird, so dass ich, wenn ich mich vor dem Bewegungsmelder bewege er nicht triggert. Außerdem sollten die Tasten auch deaktiviert sein.
Hintergrund der Sache ist, dass unsere Putzfrau zu der Zeit im Haus ist.
Leider habe ich keine Ideen wie ich das ganze umsetzen soll, bzw wie ich dem Sonos sage, dass er nicht auf die Befehle des Bewegungsmelder reagieren soll. Ein DOIF ist hier wahrscheinlich angebracht...
Hier nochmal mein Code, den ich bisher verwende:
#Bei Bewegung -> Webradiostream starten
define BZBewegungsmelderWebradioStart notify BZ.Bewegungsmelder_Motion:motion.* {fhem ("set Sonos_Bad PlayURI http://mp3.ffh.de/radioffh/hqlivestream.mp3;; setstate BZBewegungsmelderWebradioStop defined") if (ReadingsVal("Sonos_Bad", "transportState", "0") eq "STOPPED")}
#Nach 2 Minuten ohne Bewegung -> Webradiostream stoppen
define BZBewegungsmelderWebradioStop watchdog BZ.Bewegungsmelder_Motion:motion.* 00:02:00 SAME set Sonos_Bad Stop;; setstate BZBewegungsmelderWebradioStop defined
define SonosSkippen notify BZ.Bewegungsmelder_Btn_01:Short.* set Sonos_Bad Next;; set Sonos_Bad shuffle 1
define SonosPlaylistNEUAbspielen notify BZ.Bewegungsmelder_Btn_01:LongRelease.* set Sonos_Bad LoadFavourite NEU!;;set Sonos_Bad Play;; set Sonos_Bad shuffle 1
define SonosPlaylistPartyTechoMotivationAbspielen notify BZ.Bewegungsmelder_Btn_02:LongRelease.* set Sonos_Bad LoadFavourite Party/Techno/Motivation;;set Sonos_Bad Play;; set Sonos_Bad shuffle 1
define SonosPlaylistAlteLiederAbspielen notify BZ.Bewegungsmelder_Btn_02:Short.* set Sonos_Bad LoadFavourite Alte%20Lieder;;set Sonos_Bad Play;; set Sonos_Bad shuffle 1
Bin für jede Hilfe dankbar!
Grüße Felix
DOIF würde ich auch nehmen.
In der CommandRef steht auch alles drin, was du brauchst, such mal nach Zeit- und Wochentagssteuerung, im Kapitel DOIF.
http://fhem.de/commandref_DE.html#DOIF
Ich würde das starten und stoppen des Radios komplett über DOIF regeln, da kannst du alles in eins zusammen fassen.
Auch den Ausschluß am Freitag...
vb
Erstmal Danke für deine Antwort!
Habe mich bisher noch nicht wirklich mit DOIF beschäftigt... Und auch keine wirkliche Idee wie ich den Bewegungsmelder deaktivieren soll, so das der Sonos nicht mehr reagiert.
Habe entdeckt, dass man den Sonos disablen kann. Leider braucht fhem danach einen restart. :-\
Habe damit diesen Code geschrieben:
#Sonos reagier nicht auf Bewegungsmelder Freitags zwischen 8 und 13:30
define SonosDisable1 at *08:00:00 { if ($wday == 5) { fhem ("attr Sonos_Bad disable 1;;cmd=shutdown+restart") } }
define SonosDisable0 at *13:30:00 { if ($wday == 5) { fhem ("attr Sonos_Bad disable 0;;cmd=shutdown+restart") } }
wie Teste ich am besten Codes auf funktionsfähigkeit die einen at Befehl enthalten?
Ist der Shutdown restart command so richtig?
Grüße
Felix
Wäre es nicht einfacher, das notify (BZBewegungsmelderWebradioStart) zu disablen?
define SonosDisable1 at *08:00:00 {if ($wday == 5) {fhem ("attr BZBewegungsmelderWebradioStart disable 1;;defmod SonosDisable0 at *13:30:00 attr BZBewegungsmelderWebradioStart disable 0")}}
ungetestet
Um das at zu testen lt. commandref:
set SonosDisable1 execNow
Gruß
Hans
Ich habe keine Ahnung was einfacher ist ::) ;D
Dein Code ansich geht. Also der Sonos reagiert nicht mehr auf die Bewegung, aber ich habe an dem Bewegungsmeldern noch taster, diese sollen auch deaktiviert werden.
Du hast einfach dieses Attribut gesetzt:attr BZBewegungsmelderWebradioStart disable 1
Kann ich mit dem Attribut grundsätzlich alle Notifys deaktivieren? Wäre eine Super neue Erkenntnis für mich :D
So könnte ich sehr einfach die Notifys der Tasten einfach mit ;; getrennt an deinen code anhängen, oder nicht?
Oder ich könnte für jede Taste den Code kopieren und das entsprechende Attribut ersetzen, sollte auch gehen, oder nicht?
Schon mal vielen Dank für deine Hilfe!
Grüße und ein schönes Wochenende
Felix
Also ein automatisiertes "shutdown restart" würde ich in jedem Fall vermeiden. Kann gravierende Nebenwirkungen haben.
Mit "disable 1" kann man sehr viele Devices temporär ausschalten, alle notify sowieso. Und ja, Du kannst die Befehle einfach aneinanderhängen.
Die Gesamtkonstruktion mit den notify und dem verschachtelten at ist aber komplizierter als ein DOIF das das alles enthält. Die Beschäftigung damit lohnt sich auch wenn DOIF auf Grund seiner Mächtigkeit durchaus erst einmal komplex und schwerer zu verstehen ist.
als DOIF is es simpel zu machen:
Nach dem Motto ungefähr: define name DOIF ([wochentag] and [Uhrzeit]and [bewegungsmelder aktiv])(set sonos an) doelse (set sonos aus)
dazu als attr noch einen wait-timer gesetzt, der das ausschalten 2 Minuten verzögert und die Messe ist gelesen...
da muss nix disabled werden, was dann wieder aktiv werden muss um es wieder zu deaktivieren.
vb
Zitat von: VB90 am 03 Dezember 2016, 19:28:28
als DOIF is es simpel zu machen:
Nach dem Motto ungefähr: define name DOIF ([wochentag] and [Uhrzeit]and [bewegungsmelder aktiv])(set sonos an) doelse (set sonos aus)
dazu als attr noch einen wait-timer gesetzt, der das ausschalten 2 Minuten verzögert und die Messe ist gelesen...
da muss nix disabled werden, was dann wieder aktiv werden muss um es wieder zu deaktivieren.
vb
So hätte ich das auch hingekriegt. Aber da der Sonos Freitags nur zu einer bestimmten zeit nicht spielen soll, weiß ich nicht wie ich das implementieren soll.
Natürlich kann ich bei Wochentag alle außer Freitag setzen, aber ich will natürlich auch Freitags nach der besagten Zeit Musik hören.
Deswegen kam mir das mit at, wo ich den besagten Zeitraum nehme und dort den Sonos versuche zu deaktivieren leichter vor :o
für sowas nutzt man dann DOELESIF...
Wenn ich oder jemand anders dir aber alles vorbetet, ist der Lerneffekt für dich gleich Null.
Ist nicht mein Vorhaben und sicher auch nicht in deinem Sinne.
Du weist doch, viele wegen führen nach Rom.
Ob notify oder doif oder ganz anders, ist am Ende meist ne Bauchentscheidung.
Zu dem Thema was von alledem besser geeignet ist, liessen sich wahrscheinlich Glaubenskriege anzetteln.
Wichtig ist, das du für dich einen Weg findest, den du verstehst, nachvollziehen und damit leben kannst.
Einer der ganz großen Vorteile von FHEM: Jeder kann nach seiner Fasson glücklich werden.
Manchmal hilf es auch Dinge genau anders herum zu betrachten.
Wie in deinem Fall, eben nicht heran zu gehen, wann du etwas nicht willst, sondern zu schauen, wann du es willst.
vb
edit: Idee: Gib deiner Zugehfrau an ihrem Schlüssel zu deiner Wohnung /Haus noch nen Bluetooth-Button mit, auf den du einen Ping setzt.
Stichwort PRESENCE. Dann ist es noch einfacher, dies und jenes zu deaktivieren, was sie von der Arbeit abhält.
Und funktioniert auch, wenn sie ausnahmsweise mal schon am Donnerstag da ist.
Erzähl ihr aber blos nicht, das du darüber auch "siehst", wie genau sie ihre Arbeitszeit ausnutzt.
So, da ihr mich mehr oder weniger dazu gezwungen habt mir das DOIF genauer anzugucken (was auch gut so ist! ;D, ich fauler Sack...), habe ich es glaube ich nun geschafft!
Ich habe ein DOIF erstellt, Uhrzeit und Wochentage implementiert und dann einfach alle Notifys die etwas mit dem Sonos zu tun haben durch das disable Attribut ausgeschaltet(durch eine 1), bzw wieder angeschaltet(durch eine 0).
Siehe hier:
define SonosDisable DOIF ([08:00-13:30|5] or [00:01-05:29|0123456]) (attr BZBewegungsmelderWebradioStart disable 1;;attr BZBewegungsmelderWebradioStop disable 1;;attr SonosSkippen disable 1;;attr SonosPlaylistNEUAbspiele disable 1;;attr SonosPlaylistPartyTechoMotivationAbspielen disable 1;;attr SonosPlaylistAlteLiederAbspielen disable 1) DOELSEIF ([05:30-00:00|012346]) (attr BZBewegungsmelderWebradioStart disable 0;;attr BZBewegungsmelderWebradioStop disable 0;;attr SonosSkippen disable 0;;attr SonosPlaylistNEUAbspiele disable 0;;attr SonosPlaylistPartyTechoMotivationAbspielen disable 0;;attr SonosPlaylistAlteLiederAbspielen disable 0)
Ich würde euch bitten kurz mal drüber zu schauen, ob das in der Theorie auch in euren Augen so funktionieren sollte!
Ich werde es spätestens heute abend merken wenn nach 00:00 der Sonos nicht mehr geht, hoffentlich!
Euch allen vielen Dank!
PS: Das DOIF war 10 mal leichter als das at, ihr hattet mal wieder Recht! ::)
Geht doch ;)
Ist es nötig, die notifys mit Bezug zu deinem Taster zu deaktivieren?
Funktioniert der Taster denn auch, wenn dein Sonos inaktiv ist, lässt sich also als Einschalter missbrauchen?
du benutzt "attr" an Stellen wo in der Commandref "set" benutzt wird.
Möchte behaupten, das es deswegen nicht funktioniert, lasse mich gern aber belehren.
vb
edit: nu versteh ich dein "attr"... denke aber, da gehört trotzdem noch ein "set" davor.
Wenn du 00:00 auf 23:45 änderst, merkst du es gleich ;)
Also der Taster is zum Skippen von Songs und zum Laden und direktem abspielen von Spotify Playlisten da.
Der Sonos spielt dann also direkt die Playlist ab. Schadet ja nicht die Taster zu deaktivieren.
Um deine Frage kurz zu beantworten: Ja die Taste lässt sich als Einschalter "missbrauchen", so soll es ja auch sein :)
Die Sache mit dem Attribut setzen habe ich von Hans Franz, er hat hier auch vorhin geantwortet. Vorher wusste ich garnicht, dass das so geht ::)
Werde sehen ob es funktioniert oder nicht, wenn nicht passe ich es an!
Melde mich dann nochmal welche Variante nun funktioniert hat :P
... um jetzt noch einen drauf zu setzen: Du könntest auch noch Deine beiden notify BZBewegungsmelderWebradioStart und BZBewegungsmelderWebradioStop auflösen und in das DOIF integrieren, also die Uhrzeiten im DOIF per "and" mit dem Auslöser BZ.Bewegungsmelder_Motion:motion verbinden und dann eben nicht disable 1/0 sondern direkt die Sonos-Aktionen starten/stoppen. Im Endeffekt noch zwei notify und die disable Struktur einsparen.
Aber gut das ist die Kür.
Zitat von: hartenthaler am 03 Dezember 2016, 23:54:04
... um jetzt noch einen drauf zu setzen: Du könntest auch noch Deine beiden notify BZBewegungsmelderWebradioStart und BZBewegungsmelderWebradioStop auflösen und in das DOIF integrieren, also die Uhrzeiten im DOIF per "and" mit dem Auslöser BZ.Bewegungsmelder_Motion:motion verbinden und dann eben nicht disable 1/0 sondern direkt die Sonos-Aktionen starten/stoppen. Im Endeffekt noch zwei notify und die disable Struktur einsparen.
Aber gut das ist die Kür.
Das wäre aufjedenfall eine weitere Herausvorderung, aber eigentlich nich unbedingt nötig ;D Solange es funktionier bin ich glücklich. Würde natürlich das ganze vereinfachen und Code sparen :o
Aber Danke für den Tipp, vielleicht morgen, wenn ich weiß das alles funktioniert und ich Lust und Zeit habe ;)
@Fixel
Der von HansFranz vorgeschlagene Code ist kein DOIF sondern ein at.
@hartenthaler
ich hab schon nach den richtigen Worten gesucht, wollt aber nicht so hart sein ;)
Schließlich hat sich Fixel auch diese notify hart erarbeitet. Sowas dann über Board werfen zu sollen/müssen...
Mir ist es Anfangs schwer gefallen. Heute müsste ich nachlesen wie notify überhaupt funzt.
vb
Ja, das ist mir bewusst, dass das kein DOIF ist, ich meine nur den disable Attribut.
Trotz nach 00:01 geht alles leider immer noch.
define SonosDisable DOIF ([08:00-13:30|5] or [00:05-05:29|0123456])
Ist das "or" denn dort richtig oder kommt dort ein "and" hin? Bin mir da unsicher, bzw weiß nicht wirklich was der unterschied(welche Auswirkung die Befehle haben) zwischen den beiden ist.
Im Event Monitor habe ich währenddessen aus gelöst wurde noch einen Fehler beseitigt, es fehlte ein N bei einem Notify.
Nach dem ich die Zeit noch ein wenig vorgestellt habewurde mir nichts im Event Monitor angezeigt, keine Fehlermeldung aber auch kein OK, dass alles ausgeführt wurde.
Wenn ich das disable Attribut oben in die Befehlszeile schreibe, funktioniert dies!
Beispiel:
attr BZBewegungsmelderWebradioStart disable 1
Der Bewehungsmelder reagiert nicht mehr, wenn ich im Raum laufe. = Musik geht nicht automatisch an, nur noch durch Taster.
Edit:Ein umändern zu "and" anstatt "or" ändert nichts. set attr BZBewegungsmelderWebradioStart disable 1
geht nicht, also muss attr BZBewegungsmelderWebradioStart disable 1
richtig sein.
Guten Abend,
habe leider immer noch keine Ahnung warum mein DOIF nicht funktioniert...
Jemand Ideen?
Im Event Monitor und Log sehe ich zu der Zeit, wo es auslösen sollte keine Einträge. :o
Hier nochmal mein DOIF:
define SonosDisable DOIF ([08:00-13:30|5] and [13:33-05:29|0123456]) (attr BZBewegungsmelderWebradioStart disable 1;;attr BZBewegungsmelderWebradioStop disable 1;;attr SonosSkippen disable 1;;attr SonosPlaylistNEUAbspielen disable 1;;attr SonosPlaylistPartyTechoMotivationAbspielen disable 1;;attr SonosPlaylistAlteLiederAbspielen disable 1) DOELSEIF ([05:30-00:00|012346]) (attr BZBewegungsmelderWebradioStart disable 0;;attr BZBewegungsmelderWebradioStop disable 0;;attr SonosSkippen disable 0;;attr SonosPlaylistNEUAbspiele disable 0;;attr SonosPlaylistPartyTechoMotivationAbspielen disable 0;;attr SonosPlaylistAlteLiederAbspielen disable 0)
Das einzige was das DOIF machen soll, ist alle Notifys die mit dem SONOS was zu tun haben zu einem bestimmten Wochentag und der angegebenen Zeit zu aktivieren oder zu deaktivieren.
Die Befehle sollten so richtig sein, habe sie ohne DOIF getestet, so kann ich die einzelnen notifys disablen.
Ich schätze ich habe irgendeinen Syntax Fehler? Finde ihn aber nach längerem Suchen immer noch nicht. :(
Würde mich freuen wenn jemand sieht/weiß woran es scheitert!
Grüße
Felix
ab morgen kannst du disablesdForIntervals auch mit angabe von wochentagen verwenden. d.h. du kannst damit drin notify freitags für diese zeit einfach deaktivieren.
gruss
andre
... aus meiner Sicht ist es niemals gleichzeit ("and") zwischen 8 Uhr bis 13:30 und 13:33 bis 5:29. Du meinst sicherlich "or".
Und ich bin nicht sicher, ob man über die Tagesgrenze hinweg einen Zeitraum formulieren kann wenn man auch noch Wochentage angibt (wie soll man denn das interpretieren???). Ich würde da schreiben ... or [13:33-23:59|0123456] or [00:00-5:29|0123456] ...