Einfaches Script zum ein-/ausschalten mehrere Geräte übver den Harmony Hub

Begonnen von phoenix, 19 November 2016, 07:00:57

Vorheriges Thema - Nächstes Thema

phoenix

Guten Morgen,
ich habe gestern mal versucht ein kleines Script zu basteln, um mehre Geräte nacheinander einschalten zu können, mit nur einem Klick. In meinem Fall soll es ein Receiver und der Beamer sein, beide werden über den Harmony Hub angesteuert. Später soll dann auch noch Licht mit ins Script.
Für mein Vorhaben habe ich mir einen Dummyschalter angelegt, den mit on:off versehen. In meinen Fall "Hifi" und dann via notify das Script:
Hifi {if ("$EVENT" ne "off")

{fhem("set SZ.Harmony command Yamaha-AV-Receiver PowerOn ;; set SZ.Harmony command Yamaha-AV-Receiver InputHdmi2 ;; set SZ.Harmony command ViewSonic-Projektor PowerToggle")  }
else
{fhem("set SZ.Harmony command Yamaha-AV-Receiver PowerOff ;; set SZ.Harmony command ViewSonic-Projektor PowerToggle")}
}


Leider funktioniert das nicht so wie ich gehofft habe. Der Receiver wird zuverlässig eingeschaltet wenn Hifi aus ist,  aber HDMI2 wird nicht eingestellt und der Viewsonic mag einfach nicht angehen und ich weiß ehrlich gesagt nicht warum.  set SZ.Harmony command ViewSonic-Projektor PowerToggle funktioniert über die FHEM Kommandozeile einwandfrei, zumindest lässt sich der Beamer so einschalten, ausschalten leider nicht aber Powetoggle ist das einzige zulässige "Power" Kommando für das Gerät.
Wie ich im Wiki gelesen habe sollten sich so ja eigentlich mehrere Geräte einschalten lassen. Oder brauche ich vielleicht eine Wartezeit nach jedem Kommando, weil FHEM die Befehle schneller an den Hub sendet als dieser die verarbeiten kann?

phoenix

Bin mittlerweile einen großen Schritt weiter. Scheinbar sind Leerzeichen bei dem Code extrem wichtig und relevant.
Ich habe jetzt aus
{fhem("set SZ.Harmony command Yamaha-AV-Receiver PowerOn ;; set SZ.Harmony command Yamaha-AV-Receiver InputHdmi2 ;; set SZ.Harmony command ViewSonic-Projektor PowerToggle")  }
einfach mal folgendes gemacht
{fhem("set SZ.Harmony command Yamaha-AV-Receiver PowerOn ; ; set SZ.Harmony command Yamaha-AV-Receiver InputHdmi2 ; ; set SZ.Harmony command ViewSonic-Projektor PowerToggle")  }
also ein Leerzeichen zwischen die beiden Semikolons und schon funktioniert der Spaß.
Einziges verbleibendes Proiblem ist jetzt nur noch das ausschalten des Beamers, aber das gehört hier ja nicht so wirklich hin eigentlich, aber wenn jemand da einen Tip hat wäre ich sehr dankbar, warum sich das Teil mit Powertoggle nicht ausschalten lässt

justme1968

es liegt nicht am verarbeiten durch den hub.

sondern das geht vermutlich deshalb nicht weil die diversen verzögerungen die die meisten geräte brauchen um nach dem einschalten oder zwischen kommandos auf den nächsten befehl hören zu können nicht eingehalten werden. auf dauer ist der code auch nicht schlecht erweiterbar und wird unübersichtlich.

warum verwendest du keine activities. die sind doch in der harmony genau dazu da. harmonys sind nicht dazu gemacht manuell geräte kommandos abzusetzen sondern über passend konfigurierte activities mehrere geräte gemeinsam zu schalten.

mit deinem ansatz versuchst du genau das feature für das du beim kauf der harmony vor allem bezahlt hast von hand nachzubauen und verzichtest auf alle möglichkeiten die du damit hast. ganz abgesehen davon das du den hub nicht mehr gemeinsam mit einer harmony remote oder der app verwenden kannst.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

phoenix

Zitat von: justme1968 am 19 November 2016, 08:52:33
warum verwendest du keine activities. die sind doch in der harmony genau dazu da.
Du hast natürlich recht. Die activities sind natürlich dafür da und man kann ja jederzeit command gegen activity austauschen in dem Script. Mir war es jetzt aber wichtig, mehrere Befehle hintereinander absetzen zu können weil ich auch noch andere Geräte steuern möchte die nicht direkt vom Hub angsteuert werden können. Receiver und Beamer waren jetzt nur zwei Geräte zum testen. In das Script bastel ich noch Coco Aktoren sobald ich rausgefunden habe wie die gedimmt werden können mit FHEM und einige IT Steckdosen, denn ich möchte gerne meinen LM rausschmeissen :)


justme1968

wenn du es von hand machst musst du dich halt selber um die verzögerungen kümmern und dabei darauf achten das du fhem nicht blockierst.

schau dir mal structure und LightScene jeweils mit dem asyncDelay attribut an.

in der regel muss man zum reinen schalten keine eigenen scripte bauen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968