Neues Modul für Hyperion Server 98_Hyperion.pm

Begonnen von DeeSPe, 29 Juni 2016, 18:54:18

Vorheriges Thema - Nächstes Thema

DeeSPe

Zitat von: Bootscreen am 14 November 2016, 13:52:08
gäbe es dort eine Möglichkeit valueGainUp und valueGainDown zu bekommen? Dann könnte ich das nämlich auf meiner Harmony auf 2 Tasten legen :D

Klar, machbar ist (fast) alles.
Wenn das wirklich benötigt wird dann baue ich das gerne ein.

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

Bootscreen

Benötigen wäre der falsche Ausdruck. Es wäre nice to have. Wichtiger wäre, zumindest für mich, die Sache mit den eventargs und, sofern machbar, eigene Set befehle. Im Grunde sowas wie cmd alias nur halt ohne zusätzliches Device ^^

Gesendet von meinem Nexus 10 mit Tapatalk

Gruß
Oliver

FHEM 5.7 Hardware:
Raspberry PI B+ | HomeMatic USB 2 | 433Mhz Sender (pilight) | nanoCUL (433Mhz)

DeeSPe

Zitat von: Bootscreen am 14 November 2016, 14:40:59
Benötigen wäre der falsche Ausdruck. Es wäre nice to have. Wichtiger wäre, zumindest für mich, die Sache mit den eventargs und, sofern machbar, eigene Set befehle. Im Grunde sowas wie cmd alias nur halt ohne zusätzliches Device ^^

Sicher meinst Du die Effekt Args! 8)
Bin leider i.M. zu selten zu hause um das in Ruhe auszuprobieren.
Auf meinem Dev-Laptop, ohne real anzeigenden Hyperion, ist es nicht herauszubekommen ob der die übergebenen Args übernommen hat.
Evtl. komme ich Ende der Woche zum Testen.

Was meinst Du noch mit eigene Set Befehle?

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

Bootscreen

Kenn ich, wenn du Hilfe brauchst sag bescheid, sofern ichs zeitlich schaffe helf ich gerne.

Ich meinte damit im Grunde das was man mit cmdAlias und Eventmap auch kann nur halt ohne neues Device sondern als Attribut.
Ich hatte da sowas im Kopf:
attr <hyperion device> userSet <name>:<command>|<name>:<command>
name ist dann das was unter set auftaucht, z.B. blinkeGruen und als command dann den kompletten String den man normalerweise bei "set <hyperion>" angibt. Da die set Befehle mit EffectArgs unheimlich lang werden können, wäre das halt eine schöne Variante.

Ich hoffe ich konnte erklären was ich meine
Gruß
Oliver

FHEM 5.7 Hardware:
Raspberry PI B+ | HomeMatic USB 2 | 433Mhz Sender (pilight) | nanoCUL (433Mhz)

DeeSPe

Zitat von: Bootscreen am 14 November 2016, 17:11:56
Kenn ich, wenn du Hilfe brauchst sag bescheid, sofern ichs zeitlich schaffe helf ich gerne.

Ich meinte damit im Grunde das was man mit cmdAlias und Eventmap auch kann nur halt ohne neues Device sondern als Attribut.
Ich hatte da sowas im Kopf:
attr <hyperion device> userSet <name>:<command>|<name>:<command>
name ist dann das was unter set auftaucht, z.B. blinkeGruen und als command dann den kompletten String den man normalerweise bei "set <hyperion>" angibt. Da die set Befehle mit EffectArgs unheimlich lang werden können, wäre das halt eine schöne Variante.

Ich hoffe ich konnte erklären was ich meine

Danke, zum Code schreiben komme ich immer mal wieder, aber das Testen am Live System ist gerade schwierig. Kriege ich aber, wie gesagt, gegen Ende der Woche sicherlich mal hin.
Das mit den userSet Befehlen habe ich verstanden, wäre dann aber eher ein späterer Schritt nachdem das mit den Args überhaupt klappt.

Soeben habe ich ein Update eingecheckt welches die von Euch gewünschten set Befehle für valueGain beinhaltet.
Gibt's dann ab sofort via SVN oder ab morgen im FHEM Update.

Changelog:

  • neue set Befehle für valueGainDown und valueGainUp, die Stufe kann mit übergeben werden oder im Attribut hyperionGainStep vordefiniert werden (Voreinstellung: 0.1)
  • commandref angepasst

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

DeeSPe

Habe mir das nun mit denn Effekt Argumenten angesehen und es klappt tatsächlich mit dem Setzen per JSON.
Bin schon am Umsetzen der Funktion, habe dabei aber gerade wieder ein kleines Statuserkennungsproblem, mal schauen wie ich das gelöst bekomme. Das Feature kommt aber mit Sicherheit bald.  8)

Leider habe ich aus dem Hyperion Forum bezüglich der Statuserkennung nach dem Start von Hyperion keine guten Nachrichten bekommen:

ZitatThx für deine bemühungen um hyperion+fhem

Bzgl aktuellem problem ist das aus dev sicht gerade etwas unpraktisch, da in ng der starteffekt, die statusausgabe via json und die prioritäten geändert wurden. Wahrscheinlich wirds in .ng besser laufen. Meine Motivation/Ressourcen im alten code zu buddeln ist eher gering. Ich schau mir das thema mal in .ng an ....
Lg, rp

Ich könnte mir vorstellen für diesen Fall noch ein Attribut mit einzuführen in welchem man den Default Status nach Hyperion Neustart vorgeben könnte. Das müsste dann aber wieder abhängig zu der geladenen Konfig Datei sein! Ui ui ui...

Andere Ideen?

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

DeeSPe

#351
Hier eine erste Testversion.

Beim Setzen von Effekten kann nun auch als letztes Argument ein JSON String ohne beinhaltende Leerzeichen für die Effektargumente mit übergeben werden.

Beispiel:
set <name> effect Knight_rider 0 0 {"speed":2.0}

Es gibt nun allerdings einen kleinen Schönheitsfehler bei der Erkennung des aktiven Effekts. Da die Effektargumente nun mit keinen von den vorhandenen übereinstimmen, kann der zugrundeliegende Ursprungseffekt nicht genau bestimmt werden. Ich habe einen Fallback eingebaut, so dass dann der letzte dem Scriptnamen entsprechende Effektname als Anzeige benutzt wird.

Bitte testet das Mal aus ob es sonst Euren Vorstellungen entspricht.

Gruß
Dan

EDIT: Ein neues Reading effectArgs gibt es auch.

EDIT2: Testversion entfernt wegen neuer Testversion.
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

DeeSPe

#352
Zitat von: Bootscreen am 14 November 2016, 17:11:56
Ich meinte damit im Grunde das was man mit cmdAlias und Eventmap auch kann nur halt ohne neues Device sondern als Attribut.
Ich hatte da sowas im Kopf:
attr <hyperion device> userSet <name>:<command>|<name>:<command>
name ist dann das was unter set auftaucht, z.B. blinkeGruen und als command dann den kompletten String den man normalerweise bei "set <hyperion>" angibt. Da die set Befehle mit EffectArgs unheimlich lang werden können, wäre das halt eine schöne Variante.

Ich hoffe ich konnte erklären was ich meine

So richtig sehe ich den Sinn der gewünschten userSet noch nicht.
Ich denke es ist auch den Aufwand nicht wert denn ick kann mir mir cmdalias schnell entsprechende Befehle anlegen, z.B.:
define ca_hypeff1 cmdalias hypeff1 AS set wz_TVLicht effect Knight_rider 0 0 {"color":[0,0,255],"speed":2}

Gruß
Dan

EDIT: Ja, cmdalias ist ein weiteres Device, aber dafür kann der resultierende Befehl sehr kurz sein um einen entsprechenden Effekt zu setzen (was normalerweise eine komplexere Befehlseingabe erfordert).
z.B. "he1" für "set <name> effect Knight_rider 0 0 {"color":[0,255,0],"speed":2}"
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

Schlimbo

Hallo DeeSPe,
danke für das Einbauen der effectArgs, funktioniert bei mir wie gewünscht  :)

Mir ist aber gerade noch etwas anderes aufgefallen:
Setzte ich ein Befehl mit Angabe einer "priority" ab z.B.
set Hyperion rgb 00FF00 0 95
und will es dann mit "clear 95" wieder abschalten, funktioniert es nicht, die Farbe bleibt gesetzt.
Könntest du dir das setzten und löschen der Priorität bitte noch mal ansehen?

Gruß Schlimbo

DeeSPe

Zitat von: Schlimbo am 21 November 2016, 08:31:52
Hallo DeeSPe,
danke für das Einbauen der effectArgs, funktioniert bei mir wie gewünscht  :)

Schön, so soll es sein. 8)

Zitat von: Schlimbo am 21 November 2016, 08:31:52
Mir ist aber gerade noch etwas anderes aufgefallen:
Setzte ich ein Befehl mit Angabe einer "priority" ab z.B.
set Hyperion rgb 00FF00 0 95
und will es dann mit "clear 95" wieder abschalten, funktioniert es nicht, die Farbe bleibt gesetzt.
Könntest du dir das setzten und löschen der Priorität bitte noch mal ansehen?

Habe ich mir angesehen und da tatsächlich noch einen Fehler gefunden, danke für's Finden.
Fehler ist behoben und gibt es dann mit dem nächsten Update.

Bin gerade dabei mir was einfallen zu lassen um noch Custom-Effects über ein Attribut innerhalb des Devices definieren zu können. Das wird evtl. doch so ähnlich wie die gewünschten userSet. 8)
Wenn ich das heute noch fertig bekomme, gibt's heute Abend noch einmal eine Testversion. Wenn es damit keine Probleme gibt, dann werde ich die einchecken.

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

DeeSPe

#355
Anbei eine neue Testversion.

Den Fehler mit dem nicht wirksamen clear habe ich behoben.
Es ist nun möglich Custom-Effects über das Attribut hyperionCustomEffects anzulegen.
Diese Custom-Effects sind dann ganz normal in der Effektliste ganz unten zu finden.

Custom-Effects müssen wie folgt definiert werden:
Jeder Custom-Effect ist ein eigener abgeschlossener JSON String.
Mehrere Effekte werden mit Leerzeichen voneinander getrennt.
Innerhalb des JSON für jeden Effekt sind keine Leerzeichen zulässig (Leerzeichen in Effektnamen müssen mit Unterstrichen ersetzt werden).
Als Erstes im JSON muss name stehen, das ist das was dann als Effektname angezeigt wird.
Als Zweites im JSON muss oname stehen, das ist der Originalname des Ursprungseffekts.
Als Drittes im JSON muss args stehen, das sind dann die entsprechenden Argumente für den Effekt.

Beispiel mit nur einem Custom-Effect:
attr <name> hyperionCustomEffects {"name":"Knight_Rider_speed_2","oname":"Knight_rider","args":{"color":[255,0,255],"speed":2}}

Beispiel mit mehreren Custom-Effects:
attr <name> hyperionCustomEffects {"name":"Knight_Rider_speed_2","oname":"Knight_rider","args":{"color":[255,0,255],"speed":2}} {"name":"Knight_Rider_speed_4","oname":"Knight_rider","args":{"color":[0,0,255],"speed":4}}

Sollte die Reihenfolge im JSON nicht eingehalten werden oder es unzulässige Zeichen beinhalten, so wird beim Übernehmen des Attributs ein Fehler ausgegeben und das Attribut nicht gespeichert.

Gruß
Dan

EDIT: Bei einem statusRequest wird nun auch der Custom-Effect erkannt und entsprechend angezeigt. Sollte zu den eingestellten Effektargumenten kein passender Custom-Effect gefunden werden, so greift wieder der Fallback auf den letzten gefundenen Namen mit dem selbem Script.

EDIT2: Nur wenn die Custom-Effects angelegt wurden, kann der entsprechende Effekt mit toggle oder mode wiederhergestellt werden. Alle nur per set übergebenen Effektargumente können bei toogle oder mode nicht wiederhergestellt werden.

EDIT3: Absturz beseitigt.

EDIT4: RegEx berichtigt

EDIT5: "set <name> addEffect <effektname>" hinzugefügt.

EDIT6: Wegen der besseren Lesbarkeit sind nun statt Leerzeichen auch Zeilenumbrüche zwischen den jeweiligen Effekten im Attribut hyperionCustomEffects möglich.

EDIT7: Testmodul entfernt, alle Änderungen ab 24.11.2017 im FHEM Update verfügbar.
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

Schlimbo

Hallo DeeSPe,
wollte gerade die neue Version testen, nach dem Reload des Moduls Stürzt mein FHEM aber ab.

Im Log steht folgendes:
2016.11.21 17:44:11 3: Hyperion device opened
Can't use an undefined value as an ARRAY reference at ./FHEM/98_Hyperion.pm line 272.

DeeSPe

Danke für's Testen und die schnelle Rückmeldung.

Habe den Absturzfehler beseitigt und im Beitrag oben die fehlerbereinigte Version hochgeladen.

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

Schlimbo

Danke,  damit klappt es, der clear Befehl funktioniert jetzt auch bei mir. :)

Ich habe gerade das Custom-Effect Attribut gesetzt.
Mit zwei Einträgen funktioniert es:
{"name":"Blink_red","oname":"Strobe_white","args":{"color":[255,0,0],"frequency":2.0}} {"name":"Blink_green","oname":"Strobe_white","args":{"color":[0,255,0],"frequency":2.0}}

Hänge ich noch ein drittes mit an, bekomme ich eine Fehler Meldung.
{"name":"Blink_red","oname":"Strobe_white","args":{"color":[255,0,0],"frequency":2.0}} {"name":"Blink_green","oname":"Strobe_white","args":{"color":[0,255,0],"frequency":2.0}} {"name":"Blink_blue","oname":"Strobe_white","args":{"color":[0,0,255],"frequency":2.0}}

Fehler Meldung:
Invalid value {"name":"Blink_red","oname":"Strobe_white","args":{"color":[255,0,0],"frequency":2.0}} {"name":"Blink_green","oname":"Strobe_white","args":{"color":[0,255,0],"frequency":2.0}} {"name":"Blink_blue","oname":"Strobe_white","args":{"color":[0,0,255],"frequency":2.0}} for attribute hyperionCustomEffects. Must be a space separated list of JSON strings.


DeeSPe

Sorry, mein Fehler! Hatte den RegEx nur mit max. 2 Einträgen getestet.
Sollte jetzt klappen, die Version oben ist aktualisiert!

Danke für's so schnelle Testen und das Feedback!

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