Moin moin,
da ich in den letzten Tagen mein Ambilight mit Hyperion wieder aufgebaut habe und mir die Idee kam, warum lasse ich nicht mein Ambilight blinken wenn ein Anruf eingeht oder es an der Tür klingelt oder oder oder, habe ich mich dran gemacht und ein Hyperion Modul geschrieben.
Da es mein erstes Modul ist bitte ich um ein wenig Nachsicht und bin über jeden Verbesserungsvorschlag dankbar =)
Mit dem Modul kann man die Farbe einstellen oder Effekte starten. Man kann diese auch zeitlich begrenzen.
Der Hyperion Server muss dazu den JSON Server aktiviert haben.
Define
define <name> Hyperion <IP oder HOSTNAME> <PORT>
Set <required> [optional]
- clear löscht alle Farben und Effekte
- color <RRGGBB> [Dauer] [Priorität] sendet die Farbe in RGB Hex Format mit optionaler Dauer und Priorität
- color_g sendet die Farbe in RGB Hex Format aus dem Colorpicker
- effect <Effekt> [Dauer] [Priorität] startet den Effekt (Leerzeichen müssen durch Unterstriche ersetzt werden, siehe dazu 'get <name> effectList') mit optionaler Dauer und Priorität
- effect_g startet den Effekt aus der Dropdown Liste
- loadEffects Lädt die Effekte aus dem Attribut effects in die Dropdown Liste für effect_g
- off Schaltet das Licht aus indem es die Farbe auf schwarz setzt
Get
- effectList holt eine Liste von Effekten vom Hyperion Server und speichert diese im Attribut effects
Attributes
- effects Liste von Effekten für die Dropdown Liste effect_g
- duration Standard Dauer, wenn nicht gesetzt ist die Dauer unendlich
- priority Standard Priorität, wenn nicht gesetzt ist die Priorität 500
- verbose 4 aktiviert einige Logeinträge
Readings
- state
- success: wenn get oder set clear erfoglreich
- started infinity: wenn set effect oder color ohne Dauer gestartet
- started: wenn set effect oder color mit Dauer gestartet
- finished: wenn set effect oder color mit Dauer beendet
- last_result zeigtdie letzte Antwort von hyperion
- last_command zeigtden zuletzt gesendeten Befehl
- last_type zeigtden zuletzt gesendeten Typ
- last_value zeigtden zuletzt gesendeten Typ-Parameter
- last_duration zeigtden zuletzt gesendete Dauer
- last_priority zeigt den zuletzt gesendete Priorität
Ich hoffe der ein oder andere kanns auch gebrauchen. Sollten Probleme auftreten sagt Bescheid, kann zwar nicht garantieren das ich mich sofort drum kümmer, aber ich versuchs zeitnah hinzubekommen.
Changelog:
# V 0.1.0 2016-02-23 - initial beta version
# V 0.1.1 2016-02-23 - fixed commandref formating
# V 0.2.0 2016-02-24 - fixed effect_g not loaded after reload
# changed attribute effects, no underscore required anymore
# added error handling for unsupported commands
# optimized some code
# removed duplicated and unnecessary code
# V 0.3.0 2016-02-25 - added readings
# V 0.4.0 2016-03-06 - added off command (testing)
# fixed delete old hash->last_command
# V 0.4.1 2016-03-06 - fixed concatenation of duration to priority
# changed version numbers
Girhub:
https://github.com/Bootscreen/fhem_hyperion
Gruß Bootscreen
Hallo Bootscreen,
coole Idee, v.a. das Ganze auch gleich Zeitlich bregrenzt zu machen :)
Werd ich die Tage mal ausprobieren.
Gruß,
Kuzl
Kann ich auch auslesen, ob Hyperion gerade von Kodi (oder einem anderen Hyperion-Client) angesteuert wird?
Wäre halt irgendwie unschön, wenn man das Ambilight blinken lassen will, aber das gerade vom TV genutzt wird.
Nein, das geht leider nicht. Dazu bietet hyperion selbst auch keine möglichkeit. Aber du müsstest die Priorität niedriger setzen können als die von XBMC/KODI, ich glaub das müsste 1000 sein, dann wird selbst wenn du einen Effect startest er nicht angezeigt.
Und der Punkt unschön ist immer Ansichtssache, ich z.B. will es genau so haben. Ich will ja auch beim Fernseh schauen das Telefon mitbekommen auch wenn ich es nicht hören kann ^^
Hab die letzten 2 Tage noch ein wenig dran gearbeitet:
Changelog:
# V 0.20 2016-02-24 - fixed effect_g not loaded after reload
# changed attribute effects, no underscore required anymore
# added error handling for unsupported commands
# optimized some code
# removed duplicated and unnecessary code
# V 0.30 2016-02-25 - added readings
Zitat von: Bootscreen am 24 Februar 2016, 22:09:26
Und der Punkt unschön ist immer Ansichtssache, ich z.B. will es genau so haben. Ich will ja auch beim Fernseh schauen das Telefon mitbekommen auch wenn ich es nicht hören kann ^^
sollte auch nicht negativ gemeint sein :-)
Aber dann kann man es ja über die Priorität regeln. Prima.
Danke für das Modul
sorry, beim zweitem mal lesen klang es auch härter als es gemeint war.
Ich hab mich nochmal versucht schlau zu machen, bei dem V4L2 Grabber müsste es gehen da man dort die Priority in der config angeben kann. Hier müsste die Priority also höher sein als die in der config.
Bei XBMC/Kodi wird es wohl nicht klappen, zumindest klappte es bei mir nicht, da ich die Priority niederiger angeben musste als XBMC/Kodi sonst wurde mir gar nichts angezeigt. Hier müsste man also XBMC/Kodi noch in FHEM einrichten und dann in dem Script welches den Effekt starten soll prüfen ob der Playstatus nicht played ist.
Hallo Bootscreen,
ich glaube Kodi hat Priorität 1500 oder 1000, eins von beiden. Wenn du es in FHEM entsprechend einstellst, sollte es eigentlich gehen.
Ansonsten kannst du auch in der config Kodi komplett ausschalten und es über das Kodi-Plugin machen. Da kann man die Priorität selbst einstellen.
Habs gestern installiert, funktioniert soweit wunderbar, danke :)
Grundsätzlich funktioniert das Modul bei mir, aber ich kann weder die Farben setzen noch die Effekte.
Im Log finde ich nur das hier:
2016.03.06 10:51:58 1: PERL WARNING: Use of uninitialized value in numeric gt (>) at ./FHEM/98_Hyperion.pm line 163.
Irgendeine Idee? Danke im Voraus!
hy,
ich glaub ich weiß wo der Fehler ist, lade gleich ne neue Version hoch. Teste die mal und stell wenns nicht geht Verbose auf 5 und poste mal deinen Log.
Zitat von: Bootscreen am 06 März 2016, 15:38:53
hy,
ich glaub ich weiß wo der Fehler ist, lade gleich ne neue Version hoch. Teste die mal und stell wenns nicht geht Verbose auf 5 und poste mal deinen Log.
Cool teste heute Abend direkt!
So, neue Version ist online
Zitat von: Bootscreen am 06 März 2016, 15:53:22
So, neue Version ist online
Hi Oliver,
der Fehler ist weg, allerdings funktioniert die Version immer noch nicht.
2016.03.06 19:13:28 4: WEB_192.168.1.33_58626 GET /fhem?cmd={ReadingsVal(%22hyperion%22,%22clear%22,%22%22)}&XHR=1; BUFLEN:0
2016.03.06 19:13:28 5: Cmd: >{ReadingsVal("hyperion","clear","")}<
2016.03.06 19:13:28 4: name: /fhem?cmd={ReadingsVal(%22hyperion%22,%22clear%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2016.03.06 19:13:28 4: Connection accepted from WEB_192.168.1.33_58627
2016.03.06 19:13:28 4: WEB_192.168.1.33_58627 GET /fhem?cmd={AttrVal(%22hyperion%22,%22room%22,%22%22)}&XHR=1; BUFLEN:0
2016.03.06 19:13:28 5: Cmd: >{AttrVal("hyperion","room","")}<
2016.03.06 19:13:28 4: name: /fhem?cmd={AttrVal(%22hyperion%22,%22room%22,%22%22)}&XHR=1 / RL:29 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2016.03.06 19:13:28 4: WEB_192.168.1.33_58626 GET /fhem?XHR=1&inform=type=status;filter=hyperion;since=1457288007;fmt=JSON&fw_id=23×tamp=1457288008275; BUFLEN:0
2016.03.06 19:13:30 4: WEB_192.168.1.33_58627 GET /fhem?cmd={ReadingsVal(%22hyperion%22,%22effect_g%22,%22%22)}&XHR=1; BUFLEN:0
2016.03.06 19:13:30 5: Cmd: >{ReadingsVal("hyperion","effect_g","")}<
2016.03.06 19:13:30 4: name: /fhem?cmd={ReadingsVal(%22hyperion%22,%22effect_g%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2016.03.06 19:13:31 4: Connection closed for WEB_192.168.1.33_58626: EOF
2016.03.06 19:13:31 4: WEB_192.168.1.33_58627 POST /fhem&detail=hyperion&dev.sethyperion=hyperion&cmd.sethyperion=set&arg.sethyperion=effect_g&val.sethyperion=Knight_rider; BUFLEN:0
2016.03.06 19:13:31 5: Cmd: >set hyperion effect_g Knight_rider<
2016.03.06 19:13:31 4: hyperion: set effect: '{"effect":{"name":"Knight rider"},"command":"effect","priority":5000}'
2016.03.06 19:13:31 4: WEB_192.168.1.33_58627 GET /fhem?detail=hyperion&fw_id=; BUFLEN:0
2016.03.06 19:13:31 4: name: /fhem?detail=hyperion&fw_id= / RL:2803 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
2016.03.06 19:13:31 4: WEB_192.168.1.33_58627 GET /fhem?cmd={ReadingsVal(%22hyperion%22,%22clear%22,%22%22)}&XHR=1; BUFLEN:0
2016.03.06 19:13:31 5: Cmd: >{ReadingsVal("hyperion","clear","")}<
2016.03.06 19:13:31 4: name: /fhem?cmd={ReadingsVal(%22hyperion%22,%22clear%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2016.03.06 19:13:31 4: Connection accepted from WEB_192.168.1.33_58634
2016.03.06 19:13:31 4: WEB_192.168.1.33_58634 GET /fhem?cmd={AttrVal(%22hyperion%22,%22room%22,%22%22)}&XHR=1; BUFLEN:0
2016.03.06 19:13:31 5: Cmd: >{AttrVal("hyperion","room","")}<
2016.03.06 19:13:31 4: name: /fhem?cmd={AttrVal(%22hyperion%22,%22room%22,%22%22)}&XHR=1 / RL:29 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2016.03.06 19:13:31 4: WEB_192.168.1.33_58627 GET /fhem?XHR=1&inform=type=status;filter=hyperion;since=1457288010;fmt=JSON&fw_id=24×tamp=1457288011672; BUFLEN:0
EDITH: Eben ist mir aufgefallen, dass er nach dem Set Kommando mit dem Effekt noch ein "set effect clear" schickt. Das sollte doch nicht sein, oder?
hmmm.... mach mal ein "set hyperion effect_g Knight_rider; list hyperion" und zeig das Resultat. Ich schau dann nochmal, kann aber nich verssrprechen das es noch heute abend was wird.
Zitat von: Bootscreen am 06 März 2016, 20:13:32
hmmm.... mach mal ein "set hyperion effect_g Knight_rider; list hyperion" und zeig das Resultat. Ich schau dann nochmal, kann aber nich verssrprechen das es noch heute abend was wird.
Internals:
DEF 192.168.1.43 19444
IP 192.168.1.43
NAME hyperion
NR 20
PORT 19444
STATE started infinity
TYPE Hyperion
Readings:
2016-03-06 20:51:20 last_command {"effect":{"name":"Knight rider"},"command":"effect","priority":5000}
2016-03-06 20:51:20 last_duration 0
2016-03-06 20:51:20 last_priority 500
2016-03-06 20:51:20 last_result {"success":true}
2016-03-06 20:51:20 last_type effect
2016-03-06 20:51:20 last_value Knight rider
2016-03-06 20:51:20 state started infinity
Attributes:
effects Knight rider,Blue mood blobs,Cold mood blobs,Full color mood blobs,Green mood blobs,Red mood blobs,Warm mood blobs,Police Lights Single,Police Lights Solid,Rainbow mood,Rainbow swirl fast,Rainbow swirl,Snake,Strobe blue,Strobe Raspbmc,Strobe white,test,UDP listener,X-Mas
room Hyperion
verbose 5
Hab den Fehler gefunden, das Problem war das die Duration von 0 an die Priority angehängt wurde. Hab ne neue Version hochgeladen, nun sollte es gehen.
Teste bitte nochmal und gib dann Rückmeldung.
Mache ich aber heute Abend nicht mehr...mache ich morgen und schon einmal vielen lieben Dank für deine Hilfe!
Perfekt es klappt nun alles! Super Danke für deine Mühe und die tolle Arbeit!
Hallo,
das Modul läuft bei mir auf Anhieb einwandfrei - vielen Dank!
Hallo,
könntest du noch eine Möglichkeit einbauen, das Gain - also die Helligkeit - über eine Dauer zu setzen?
Ich würde nämlich gerne wenn ich einen Film schaue das Ambilight etwas "dezenter" haben.
Ansonsten könntest du das Modul sogar zuminderst unter contrib einchecken.
Viele Grüße,
Kuzl
ich bin immer wieder beeindruckt, da suchst Du eine Möglichkeit, irgendein Ding zu steuern und - natürlich hat schon jemand ein FHEM Modul geschrieben. Großartig!
Was mir auffällt: es gibt die Möglichkeit, hyperion abzuschalten, aber einschalten hab ich nicht gefunden - also in der Form dass danach dann wieder die TV Edgelight Funktion (bei mir via V4L grabber) aktiv ist - hab ich da was übersehen?
pj
kurzes Update:
Ich habe das hyperion Modul als "ambilight" in fhem eingebunden (der Name ist komplett zufällig gewählt, jede Ähnlichkeit mit einem kommerziellen Produkt ist absolut zufällig)
Um nun das ganze von meiner Hausautomations-Zentrale aus schalten zu können habe ich folgendes in meine TabletUI Konfiguration eingebunden:
<header>Ambilight</header>
<div data-type="button"
data-device="ambilight"
data-get="last_type"
data-get-on="((?!off))"
data-get-off="off"
data-set-on="effect Cinema_brighten_lights 1000 850"
data-set-off="off"
data-icon-off="fa-volume-off"
data-icon-on="fa-volume-up"
data-color="#505050">
</div>
Die Idee:
- ein Schalter, der das Ambilight an und aus schaltet (funktioniert)
- die Farbe des Schalters sollte den Zustand reflektieren (funktioniert nicht, wenn andere Quellen das Ambilight an und aus schalten)
- wenn nach dem Einschalten eine Videoquelle (v4l, Priorität 800) anliegt, soll diese nach der Animation wiedergegeben werden (funktioniert imho nicht)
"last_type" lässt sich leider nicht mit
get ambilight last_type
sondern nur mit
{ReadingsVal("ambilight", "last_type", "")}
auslesen - ich bin mir da nie sicher, wann in fhem was funktioniert, und ob das vielleicht irgendwie im Modul gelöst werden muss.
Liegt es möglicherweise daran, dass TabletUI das
data-get nicht sieht?
und die wirklich wichtige Frage: das setting
effect hat einen Timing Parameter,
a) sind das Milisekunden wie in hyperion?
b) was passiert danach? wird der Prozess mit der nächst niedrigeren Priorität aktiviert? Sollte ich also 750 statt 850 angeben?
Grüße
pj
Hallo Bootscreen und Gemeinschaft,
erst mal recht herzlichen Dank für die Umsetzung dieses Moduls.
Bin heute durch Zufall drüber gestolpert. Hatte stattdessen bisher noch einen Dummy und die entsprechende Funktion in der 99_MyUtils.pm um das über Hyperion-Remote zu steuern. Das lief soweit auch ganz gut. Das ganze über den JSON Server zu steuern gefällt mir allerdings wesentlich besser.
Leider bin ich mit dem Modul noch nicht 100%ig zufrieden, vielleicht ist es ja möglich an der ein oder anderen Stelle noch Verbesserungen mit einfliessen zu lassen. Mit dem Modulcoden kenne ich mich leider nicht aus, so dass ich nur mein Feedback und Wünsche/Erwartungen hervorbringen kann.
Zum einen mal meine Wünsche/Erwartungen:
Meines Erachtens sollte sich das Modul einigermaßen standardkonform verhalten, dass heißt zum einen sollten sich die Farben über entsprechende set Kommandos setzen lassen. Z.B.: "set Hyperion rgb FF0000", statt "set Hyperion color FF0000".
Dann sollte auch "state" den wirklich aktuellen Status widerspiegeln, bei mir steht da immer nur "started infinity". Ich habe Hyperion in ein "structure room" eingebunden, und somit ist der Status von dem structure immer "undefinded", da im "state" nicht "off" steht, obwohl "off" gesetzt wurde. Ich prüfe aber eben für einen Bewegungsmelder genau dieses structure und erhalte falsche Ergebnisse.
Wenn ich dann "set Hyperion rgb FF0000" absetzte erwarte ich auch dass das in "state" wiederzufinden ist (also "state rgb FF0000"), wird z.B. für LightScene benötigt.
Im Idealfall gäbe es auch noch entsprechende Readings für "rgb" und "effect" statt oder zusätzlich zu "last_value".
Zur Priorität würde ich sagen dass die "state" Geschichte auf jeden Fall Einzug halten sollte, eben damit man mit diesem vernünftig arbeiten kann. Alles andere wäre "nice to have".
Stelle mich gerne zum Testen zur Verfügung und gebe auch gern weiteres Feedback.
Vielen Dank im Voraus.
Gruß
Dan
Zitat von: DeeSPe am 05 Juni 2016, 13:23:12
Zum einen mal meine Wünsche/Erwartungen:
...
Meines Erachtens sollte sich das Modul einigermaßen standardkonform verhalten
...
Dann sollte auch "state" den wirklich aktuellen Status widerspiegeln
...
Wenn ich dann "set Hyperion rgb FF0000" absetzte erwarte ich auch dass
...
Zur Priorität würde ich sagen dass die "state" Geschichte auf jeden Fall
...
damit man mit diesem vernünftig arbeiten kann.
So wie sich Dein Beitrag liest, ist Deine Erwartungshaltung einfach nur respektlos gegenüber dem Autor.
Wie kommst Du darauf, dass "rgb" standardkonform ist und "color" nicht?
Es passt zwar nicht ganz zum Modul selbst, aber ich frage trotzdem mal:
Hat jemand von euch geschafft, einen automatischen Quellenwechsel (ggf. über Fhem) für Hyperion zu realisieren, also einen automatischen Wechsel der Config, je nachdem, ob ein Signal per HDMI, Intern oder per Kodi zugespielt wird?
Zitat von: dev0 am 06 Juni 2016, 06:55:54
So wie sich Dein Beitrag liest, ist Deine Erwartungshaltung einfach nur respektlos gegenüber dem Autor.
Wie kommst Du darauf, dass "rgb" standardkonform ist und "color" nicht?
Das ist überhaupt nicht respektlos.
Ich habe:
- begrüßt,
- mich beim Modulautor bedankt,
- Wünsche/Erwartungen geäußert,
- mich zum Testen und für weiteres Feedback angeboten und
- mich ein weiteres Mal im Voraus bedankt!
Ich denke ich habe mich sehr freundlich verhalten und nur auf etwaige Missstände hingewiesen.
Meines Erachtens ist das hier unter anderem ein Developer Forum (Codeschnipsel) und da sollte konstruktive Kritik erlaubt, nein sogar erwünscht sein.
Entschuldige bitte wenn ich Deiner Meinung nach dem Modulautor nicht genug lobgepriesen habe.
Nun aber zum Eigentlichen:
Viele andere Module bauen eben auf diese Standardkonformität auf. Ich habe etliche Lichter in FHEM eingebunden und alle lassen sich über "set <Name> rgb <Hex>" steuern, was hier leider nicht funktioniert. Somit ist das Modul innerhalb eines"structure" oder einer "LightScene" im Moment nicht wirklich zu gebrauchen.
Es wäre toll wenn diese kleinen Änderungen in das Modul einfließen würden.
Vielen Dank im Voraus.
Gruß
Dan
P.S. Das "state" reading ist u.A. auch für die Einbindung in HomKit wichtig.
Zitat von: Spezialtrick am 06 Juni 2016, 10:33:56
Es passt zwar nicht ganz zum Modul selbst, aber ich frage trotzdem mal:
Hat jemand von euch geschafft, einen automatischen Quellenwechsel (ggf. über Fhem) für Hyperion zu realisieren, also einen automatischen Wechsel der Config, je nachdem, ob ein Signal per HDMI, Intern oder per Kodi zugespielt wird?
Das sollte doch gar nicht so schwierig sein.
Einfach einen dummy erstellen und im entsprechenden notify oder doif einen Shell-Kommando absetzen oder Shell-Skript aufrufen welches Hyperion mit der entsprechenden Konfig neu lädt.
Natürlich muss der User fhem auch die entsprechenden Berechtigungen im Linux System bekommen um das Skript oder den Befehl auszuführen.
Gruß
Dan
Die Schwierigkeit bei mir ist, dass Fhem auf einem Cubietruck läuft und Kodi mit Hyperion auf einem Pi.
Ich habe es aber inzwischen hinbekommen, den Pi über den Cubietruck Remote per ssh zu steuern.
Hast du zufällig entsprechenden Shell-Skripte, um Hyperion mit einer anderen Config zu starten?
Zitat von: Spezialtrick am 07 Juni 2016, 16:39:10
Die Schwierigkeit bei mir ist, dass Fhem auf einem Cubietruck läuft und Kodi mit Hyperion auf einem Pi.
Ich habe es aber inzwischen hinbekommen, den Pi über den Cubietruck Remote per ssh zu steuern.
Hast du zufällig entsprechenden Shell-Skripte, um Hyperion mit einer anderen Config zu starten?
Also darüber solltest Du doch gestolpert sein bei der Hyperion Einrichtung.
Mit folgendem Code in FHEM:
{ sytem ("sudo killall hyperiond;; sleep 1;; sudo /storage/hyperion/bin/hyperiond.sh /storage/.config/hyperion.config.json") }
kannst Du Hyperion stoppen und mit bestimmter config wieder neu starten (Pfade müssen natürlich angepasst werden), so kannst Du einfach jede beliebige andere config laden. In der Datei /etc/sudoers muss das Skript hyperiond.sh für den User fhem erlaubt werden, sonst hat der User fhem keine Rechte das Skript mit sudo auszuführen. So sollte es zumindest theoretisch funktionieren. Hyperion habe ich auf diese Weise bei mir nicht eingebunden da bei mir kein Kodi läuft, sondern alles über extern vom Grabber kommt.
Ich hoffe das hilft Dir weiter, eine fertige Lösung werde ich nicht präsentieren.
Viel Spaß beim Basteln.
Gruß
Dan
Die Skripte habe ich sehr wohl gefunden, allerdings funktionieren sie nicht so wie gewollt.
Ich habe wie bereits erwähnt eingerichtet, dass der Cubietruck per ssh auf den Pi zugreifen kann:
root@cubietruck:~# su -s /bin/bash -c 'ssh root@192.187.188.68 'uptime'' fhem
22:14:42 up 24 min, 2 users, load average: 0.38, 0.84, 0.75
Außerdem habe ich unter
/opt/hyperion/config/ das Skript
hyperion_SatTV_aktivieren.sh hinterlegt:
#!/bin/sh
killall hyperiond
sleep 1
sudo kodi-send -a "Notification(Hyperion Info,Ambilight für internen Sat-Tuner aktiviert,7000,http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_hdmi.jpg)"
sudo /opt/hyperion/bin/hyperiond.sh /opt/hyperion/config/hyperion.config.SatTV.json
</dev/null >/dev/null 2>&1 &
Nun sollte ich das Skript so
su -s /bin/bash -c 'ssh root@192.187.188.68 'sudo /opt/hyperion/config/hyperion_SatTV_aktivieren.sh'' fhem
ausführen könne, was auch funktioniert. Leider nur mit diesem Fehler:
root@cubietruck:~# su -s /bin/bash -c 'ssh root@192.187.188.68 'sudo /opt/hyperion/config/hyperion_SatTV_aktivieren.sh'' fhem
No passwd entry for user '/opt/hyperion/config/hyperion_SatTV_aktivieren.sh'
root@cubietruck:~#
Lokal kommt es leider auch zu Fehlern:
root@Pi:~# sudo /opt/hyperion/config/hyperion_SatTV_aktivieren.sh
sudo: kodi-send: command not found
sudo: /opt/hyperion/bin/hyperiond.sh: command not found
Wenn ich das .sh auch dem Befehl lösche, scheint es zu funktionieren, leider komme ich nur mit crtl+c aus dem Skript heraus, das auch Hyperion beendet:
root@Pi:~# sudo /opt/hyperion/bin/hyperiond /opt/hyperion/config/hyperion.config.SatTV.json
Application build time: Feb 27 2016 12:33:50
QCoreApplication initialised
Selected configuration file: /opt/hyperion/config/hyperion.config.SatTV.json
ColorTransform 'default' => [0; 89]
Device configuration:
{
"colorOrder" : "rbg",
"name" : "MyPi",
"output" : "/dev/spidev0.0",
"rate" : 250000,
"type" : "ws2801"
}
Creating linear smoothing
Created linear-smoothing(interval_ms=33;settlingTime_ms=150;updateDelay=0
Effect loaded: Cinema brighten lights
Effect loaded: Cinema dim lights
Effect loaded: Knight rider
Effect loaded: Blue mood blobs
Effect loaded: Cold mood blobs
Effect loaded: Full color mood blobs
Effect loaded: Green mood blobs
Effect loaded: Red mood blobs
Effect loaded: Warm mood blobs
Effect loaded: Police Lights Single
Effect loaded: Police Lights Solid
Effect loaded: Rainbow mood
Effect loaded: Rainbow swirl fast
Effect loaded: Rainbow swirl
Effect loaded: Random
Effect loaded: Running dots
Effect loaded: System Shutdown
Effect loaded: Snake
Effect loaded: Sparks Color
Effect loaded: Sparks
Effect loaded: Strobe blue
Effect loaded: Strobe Raspbmc
Effect loaded: Strobe white
Effect loaded: Color traces
Effect loaded: UDP listener
Effect loaded: X-Mas
Initializing Python interpreter
Hyperion created and initialised
run effect Rainbow swirl fast on channel 0
Black border threshold set to 0.1 (26)
DETECTION MODE:default
Boot sequence(Rainbow swirl fast) created and started
XBMC video checker created and started
Json server created and started on port 19444
Proto server created and started on port 19445
V4L2 width=720 height=576
V4L2 pixel format=YUYV
Black border threshold set to 0.1 (26)
DETECTION MODE:default
V4L2 grabber signal threshold set to: {25,25,25}
V4L2 grabber started
V4l2 grabber created and started
XBMC Connection error (0)
BORDER SWITCH REQUIRED!!
CURRENT BORDER TYPE: unknown=0 hor.size=0 vert.size=0
V4L2 grabber stopped
effect finished
V4L2 grabber started
XBMC Connection error (0)
Zitat von: DeeSPe am 07 Juni 2016, 19:29:53
Ich hoffe das hilft Dir weiter, eine fertige Lösung werde ich nicht präsentieren.
Das brauchst du nicht, aber vllt. kannst du trotzdem helfen. :)
Ist ein Berechtigungsproblem!
Dann führe das auf dem Pi nicht als user fhem aus (den es ja sicherlich eh nicht auf dem Pi gibt) sonder als user pi, der sollte ja bereits die Berechtigungen haben das ausführen zu dürfen. Oder läuft Kodi unter einem anderen Benutzer? Das musst Du individuell mal checken. Es liegt auf jeden Fall an den Berechtigungen.
Wenn die Dateiberechtigungen für User pi auf "/opt/hyperion/bin/hyperiond.sh" und "/opt/hyperion/config/hyperion.config.SatTV.json" erteilt sind, dann sollte das ohne sudo laufen. Falls der entsprechende Kodi User (pi oder what ever) auf dem Pi in der Liste der sudoers steht und keine speziellen Berechtigungen auf die Dateien hat, dann muss eben mit sudo aufgerufen werden.
Gruß
Dan
Ich bin inzwischen einen Schritt weiter gekommen und kann die Quellen über die entsprechenden Skripte, die auf dem Pi liegen, vom Cubietruck aus per ssh mit folgendem exemplarischem Befehl umschalten:
su -s /bin/bash -c 'ssh pi@192.187.188.68 '/opt/hyperion/config/hyperion_SatTV_aktivieren.sh'' fhem
So sieht das Skript selbst aus:
#!/bin/sh
sudo killall hyperiond
sleep 1
kodi-send -a "Notification(Hyperion Info,Ambilight für internen Sat-Tuner aktiviert,7000,http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_hdmi.jpg)"
/opt/hyperion/bin/hyperiond /opt/hyperion/config/hyperion.config.json
</dev/null >/dev/null 2>&1 &
In Fhem habe ich einen dummy
define Ambilight dummy
attr Ambilight setList state:Sat,Kodi,Hdmi
attr Ambilight webCmd state
und das dazugehörige Doif
define Ambilight.Quellenautomatik doif ([Ambilight:state] eq "Sat") ({system ("su -s /bin/bash -c 'ssh pi@192.187.188.68 '/opt/hyperion/config/hyperion_SatTV_aktivieren.sh'' fhem");;return undef}) DOELSEIF ([Ambilight:state] eq "Kodi") ({system ("su -s /bin/bash -c 'ssh pi@192.187.188.68 '/opt/hyperion/config/hyperion_kodi_aktivieren.sh'' fhem");;return undef}) DOELSEIF ([Ambilight:state] eq "HDMI") ({system ("su -s /bin/bash -c 'ssh pi@192.187.188.68 '/opt/hyperion/config/hyperion_kodi_aktivieren.sh'' fhem");;return undef}) DOELSEIF ([Ambilight:state] eq "Test") ({system ("su -s /bin/bash -c 'ssh pi@192.187.188.68 'uptime'' fhem");;return undef})
erstellt. In Fhem kann ich die Quellen leider nicht umschalten. Habe ich einen Fehler im doif?
Zitat von: Spezialtrick am 06 Juni 2016, 10:33:56
Hat jemand von euch geschafft, einen automatischen Quellenwechsel (ggf. über Fhem) für Hyperion zu realisieren, also einen automatischen Wechsel der Config, je nachdem, ob ein Signal per HDMI, Intern oder per Kodi zugespielt wird?
Du kannst beide Quellen gleichzeitig laufen lassen. Dabei Kodi mit einer höheren Priorität als das Signal per HDMI. In Kodi musst du einstellen, dass das Ambilight nur benutzt wird, wenn auch was abgespielt wird (also nicht im leerlauf).
Dann wird im Normalfall immer HDMI benutzt und wenn Kodi etwas abspielt, automatisch Kodi.
Viele Grüße,
Kuzl
@Spezialtrick: Sorry, mit DOIF kenne ich mich überhaupt nicht aus, bei mir läuft alles über notify(s).
Aufgrund meiner Erwartungen und Wünsche an dieses Modul habe ich mich nun entschlossen das Modulcoden zu lernen, das Modul von Bootscreen als Vorlage zu nehmen (DANKE @Bootscreen) und es größtenteils neu zu schreiben.
Heute Abend werde ich noch ein paar Tests mit dem neuen Modul von mir machen und noch kleine Optimierungen einfließen lassen. Danach kann ich es bei vorhandenem Interesse gern hier zum Download anbieten.
Was wird sich ändern?
- Modul fast komplett neu geschrieben
- komplett neue Readings
- komplett neue set Kommandos (on/off/toggle/ambilight/mode)
- Funktion für devStateIcon
- Anlegen von vordefinierten Attributen (devStateIcon,homebridgeMapping,icon,webCmd) beim Definieren
- Liste der Effekte wird beim Definieren automatisch einmalig abgerufen
- state beinhaltet nun immer den aktuell gesetzten Status (gerade eingestellter Modus [+Farbe/Effekt])
- Modul optimiert für Kompatibilität mit anderen Module wie LightScene und structure
- Modul optimiert für Homebridge/HomeKit
Das Modul "merkt" sich nun immer den zuletzt eingestellten Modus (mode) im Reading "previous_mode". Bei "set <name> on" bzw. wenn toggle=on wird dann der letzte Modus mit der zuletzt eingestellten Farbe/Effekt wiederhergestellt.
Was ich noch umsetzen möchte?
- "get <name> state" würde ich gerne noch umsetzen um den aktuellen Status alle xx Sekunden zu pollen. Soweit ich weiß hat das Hyperion bisher nicht hergegeben, soll aber mit einem Update kommen bzw. ist schon in der letzten Version, das muss ich noch erforschen.
- to be continued...
Verbesserungsvorschläge und Wünsche sind sehr willkommen.
Gruß
Dan
Hätte noch den Wunsch, das gain bzw. value => Helligkeit
setzen zu können. Evtl auch Zeitlich begrenzt
Am Abend wenn alle anderen Lichter aus ist, ist das ansonsten einfach zu Hell.
Viele Grüße,
Kuzl
Zitat von: Kuzl am 14 Juni 2016, 07:13:37
Hätte noch den Wunsch, das gain bzw. value => Helligkeit
setzen zu können. Evtl auch Zeitlich begrenzt
Am Abend wenn alle anderen Lichter aus ist, ist das ansonsten einfach zu Hell.
Viele Grüße,
Kuzl
Guter Vorschlag, werde versuchen das zu berücksichtigen. Sollte aber generell machbar sein.
Ansonsten ist das neue Modul so gut wie fertig. Habe gestern Abend allerdings noch herausgefunden dass man in der aktuellen Version vom Hyperion Server den Status abfragen kann und werde das noch mit einbauen. Damit soll der Status beim define dann automatisch abgerufen werden und ein konfigurierbares Pollen wird auch Einzug halten. In der aktuellen Hyperion Server Version sind auch einige neue Effekte dazu gekommen.
Gruß
Dan
Zitat von: DeeSPe am 13 Juni 2016, 11:36:37
@Spezialtrick: Sorry, mit DOIF kenne ich mich überhaupt nicht aus, bei mir läuft alles über notify(s).
Verbesserungsvorschläge und Wünsche sind sehr willkommen.
Dann fragte ich mal im Doif Forum nach.
Im Prinzip könntest du meine Quellen "Umschaltfunktion" auch in das neue Modul aufnehmen. :)
Zitat von: Spezialtrick am 14 Juni 2016, 10:00:51
Im Prinzip könntest du meine Quellen "Umschaltfunktion" auch in das neue Modul aufnehmen. :)
Das hatte ich tatsächlich schon überlegt, allerdings steuert das Modul den JSON Server von Hyperion.
Um Hyperion mit einer anderen Konfiguration neuzustarten müsste es auf die Shell Ebene heruntergehen, was dementsprechend wieder eine manuelle Konfiguration vom User abverlangen würde (Pfad zu Hyperion, Pfad zu den config(s) und dann noch die jeweiligen config(s) selbst). Bei remote Systemen müsste auch noch der Username und das Passwort für den SSH Login hinterlegt werden, von der entsprechenden Konfiguration des remote Systems mal abgesehen. Alles in Allem zu viel Konfiguration für ein Modul (meine Meinung). Wenn das jemand haben möchte, muss es eben irgendwie selbst konfiguriert werden (auch meine Meinung).
Gruß
Dan
Hier nun das Ergebnis meiner bisherigen Bemühungen, ich hoffe Bootscreen nimmt es mir nicht übel dass ich mich als Perl Newbie an seinem Modul vergangen habe:
Ein völlig überarbeitetes Modul!
Dazu ist es auch eventuell nötig Hyperion selbst auf die letzte Version zu bringen.
Aktuell ist V1.03.0, welche ich auch zur Erstellung dieses Moduls verwendet habe.
Was sich geändert hat und was das Modul schon kann:
- [change] eigentlich alle sets und get haben sich geändert, deswegen bitte altes Device löschen und mit diesem Modul neu anlegen (es lohnt sich!)
- [new] sets für on, toggle und mode
- [new] Funktion für devStateIcon
- [new] Anlegen von vordefinierten Attributen (alias,devStateIcon,homebridgeMapping,icon,lightSceneParamsToSave,webCmd) beim Definieren
- [new] der aktuelle Status (rgb oder effect), die Hyperion Server Version, die Liste der Effekte wird beim Definieren automatisch einmalig abgerufen
- [new] state beinhaltet nun immer den aktuell gesetzten Status (gerade eingestellter Modus [+Farbe/Effekt])
- [new] mit get update kann nun der aktuelle Status des Hyperion Servers (inkl. Liste der Effekte) manuell abgerufen werden
- [new] experimentelle Implementierung von Polling
- [new] Modul optimiert für Kompatibilität mit anderen Modulen wie LightScene und structure
- [new] Modul optimiert für Homebridge/HomeKit
Was das Modul (noch) nicht kann bzw. wo es noch Schwierigkeiten gibt und was noch verbessert werden soll:
- Beim Polling ermitteln welcher Effekt gerade eingestellt ist, es wird zwar festgestellt dass ein Effekt an ist aber nicht welcher, darum wird angenommen es ist der zu letzt eingestellte - eine Lösung ist in Sicht sobald ich das JSON Parsing besser verstehe
- Beim Polling ermitteln ob "off" geschaltet ist oder "clearall" (Ambilight), darum wird der Status auch nicht verändert/aktualisiert bei diesen beiden Modi - habe bisher noch keine Unterscheidung gefunden
- Änderung der Helligkeit vom Ambilight, da weiß ich noch nicht ob und wie es machbar ist
- Es gibt noch Probleme mit der Priorität wenn man mit z.B. Hyperion Remote für iOS etwas einstellt, so bekommt das immer eine höhere Priorität als die Werte vom Modul und somit werden die Werte vom Modul nicht angenommen. Ein set clearall schafft Abhilfe.
- Allgemeine Verbesserungen im Modul z.B. nicht blockierend umsetzen
Das Device wird so definiert:
define <name> Hyperion <IP oder Hostname> <Port> [<Interval>]
Also für den auf dem selben Host laufenden Hyperion Server z.B.:
define wz_TVLicht Hyperion localhost 19444
Oder mit experimentellem Polling alle 10 Sekunden z.B.:
define wz_TVLicht Hyperion localhost 19444 10
Entwickelt und getestet habe ich mit den tagesaktuellen Versionen von FHEM, Hyperion Server und Hyperion Remote für iOS. Der Hyperion Server läuft bei mir auf dem selben System wie FHEM, somit konnte ich nur über localhost testen, aber es sollte für remote Systeme genau so gut funktionieren.
Würde mich sehr freuen wenn das Modul von dem ein oder anderen mal getestet wird.
Viel Spaß damit.
Gruß
Dan
P.S. Kritik bzw. Rat- und Vorschläge sind gern willkommen.
17.6.2016 UPDATE 2Habe soeben noch die setExtension integriert so dass nun auch on/off-for-timer, on/off-till und on/off-till-overnight zur Verfügung stehen
17.6.2016 UPDATEIch habe nochmal massiv am Modul gearbeitet.
Deshalb heute ein riesiges Update:
- Alle Daten die über den JSON Server von Hyperion bereitgestellt werden erzeugen nun entsprechende Readings
- Eine vollständige Farbkalibrierung ist nun möglich durch setzen der entsprechenden Werte set <name> <reading name> <value>
- Alle Pro-Funktionen der Hyperion Remote App werden nun auch vom Modul unterstützt (ja, auch die Helligkeit des Ambilights ist einstellbar!!!)
- Der aktive Effekt wird nun zuverlässig ermittelt und als Reading gespeichert
- Das Problem mit der Priorität wurde behoben indem die Standardpriorität auf 0 gesetzt wurde um die Einstellungen der Hyperion Remote App zu überschreiben. Ein vorheriges clearall ist nicht mehr nötig.
- Reading version in build_version umbenannt
- Das Pollen ist nun wesentlich verbessert worden
- Pollen oder manuelles "get <name> update" aktualisiert alle wichtigen Readings
- Aktueller Status on oder clearall wird nun besser erkannt, siehe bug
- <bug> Ich habe einen Fehler im JSON Server von Hyperion gefunden (und gemeldet: https://github.com/hyperion-project/hyperion/issues/701). Wenn man vollständig gesättigte Farben (z.B. FF0000 oder FF00FF) einstellt dann wird der Status als off erkannt, weil im JSON Server die eingestellte Farbe nicht dargestellt wird. Komischerweise funktioniert weiß (FFFFFF)
# latest Development by DeeSPe
#
# Changelog
#
# V 0.6.1 2016-06-17 - integrated setExtensions to set on/off-for-timer, on/off-till and on/off-till-overnight
#
# V 0.6.0 2016-06-17 - BIG UPDATE
# now everything what's available via JSON will be represented by a reading
# now every possible setting (complete color calibration) is now available with set <name> <reading name> <value>
# now the active effect will also be recognized and saved as reading while get <name> update
# this module can now act like a fully featured remote app for every available kind color calibration
# resolved the priority issue, now the default priority is 0 to be able to override the settings of the Hyperion remote app
# renamed reading version to build_version
# polling is much more robust now
# polling or manual get <name> update will refresh all important readings
# off and clearall will now be recognized more robust (see bug)
# moved attr effects to reading effects
# removed get <name> loadEffects, available effects will now be written to reading effects automatically while polling or manual get <name> update
# new command set <name> clear <priority> to clear a specific priority channel
# [bug]: I found a bug (and reported it: https://github.com/hyperion-project/hyperion/issues/701) in the Hyperion JSON server - if you set rgb to a fully saturated color (like FF0000 or FF00FF) the state will be recognized as off because the serverinfo then doesn't contain the color value
#
# V 0.5.2 2016-06-14 - get <name> update (will also be called once when defining device) now gets the version of Hyperion, the list of effects, active rgb value or if an effect is active (which effect is not recognized yet, so the previous will be set), also state off and clearall are not yet recognized so the readings will not be updated
# implemented getting current state and experimental polling (get <name> update will be called periodically)
#
# V 0.5.1 2016-06-13 - colorpicker now always shows the current rgb value
#
# V 0.5.0 2016-06-12 - rewritten most of the modul
# changed almost every reading and set
# during define now set suggested attributes for alias,devStateIcon,homebidgeMapping,icon,webCmd
# state now always shows the current state
29.6.2016 UPDATEModul komplett neu entwickelt und in neuem Thema verfügbar:
https://forum.fhem.de/index.php/topic,55112.0.html
Zitat von: DeeSPe am 14 Juni 2016, 23:57:11
Entwickelt und getestet habe ich mit den tagesaktuellen Versionen von FHEM, Hyperion Server und Hyperion Remote für iOS. Der Hyperion Server läuft bei mir auf dem selben System wie FHEM, somit konnte ich nur über 127.0.0.1 testen, aber es sollte für remote Systeme genau so gut funktionieren.
Würde mich sehr freuen wenn das Modul von dem ein oder anderen mal getestet wird.
Moin DeeSPe,
habe deine Version grade mal installiert und kann sagen, dass soweit alles läuft. Hyperion läuft bei mir auf nem extra PI, das haut auch hin. Feste RGB Werte und alle Effekte funktionieren wunderbar. Nur den Ambilight Modus kann ich zur Zeit nicht testen. HDMI Splitter und Videoconverter fehlen noch :(
Gruß Marco
Zitat von: urmel86 am 17 Juni 2016, 13:45:12
Moin DeeSPe,
habe deine Version grade mal installiert und kann sagen, dass soweit alles läuft. Hyperion läuft bei mir auf nem extra PI, das haut auch hin. Feste RGB Werte und alle Effekte funktionieren wunderbar. Nur den Ambilight Modus kann ich zur Zeit nicht testen. HDMI Splitter und Videoconverter fehlen noch :(
Gruß Marco
Dankeschön für's Testen und zurückmelden.
Habe soeben nochmal ein riesiges Update für das Modul in meinem Beitrag oben (https://forum.fhem.de/index.php/topic,49808.msg462202.html#msg462202) veröffentlicht.
Nun ist über das Modul alles möglich was die Hyperion Remote App(s) auch können.
Viel Spaß mit der neuen Version.
Gruß
Dan
Soeben noch ein kleines Update 0.6.1 hochgeladen (https://forum.fhem.de/index.php/topic,49808.msg462202.html#msg462202) mit dem nun auch set on/off-for-timer, on/off-till und on/off-till-overnight zur Verfügung stehen.
Werd mal noch schauen mit der Quellenumschaltung.
Den Grabber kann man per JSON nicht beeinflussen, aber eventuell fällt mir doch noch eine gute Shell Lösung ein.
Gruß
Dan
Seit dem Wochenende arbeite ich an einer komplett neuen Version des Moduls.
Es wird einige Veränderungen geben, z.B.:
- Es wird weniger Readings geben (ohne Funktionalitäten zu verlieren) und die Ansicht damit etwas aufgeräumter sein.
- Readings die nicht änderbar sind wandern in die Internals (hostname, version, build_time, effects).
- Kompletter Umbau der Datenverbindung zum Hyperion JSON Server.
- Unterstützung für non-blocking get durch setzen von Attribut httpUtils 1.
- Quellenumschaltung für Hyperion auf dem lokalen System (Neustart von Hyperion mit anderer Konfig). Danach überlege ich mir wie man das zusätzlich über SSH machen kann.
- Und natürlich viele kleine Verbesserungen und Fehlerbeseitigungen "unter der Haube".
Falls jemand noch Wünsche oder eventuell eine Idee hat wegen der SSH Geschichte, dann bitte bei mir melden.
Vielen Dank.
Gruß
Dan
Zitat von: DeeSPe am 20 Juni 2016, 09:40:35
Quellenumschaltung für Hyperion auf dem lokalen System (Neustart von Hyperion mit anderer Konfig). Danach überlege ich mir wie man das zusätzlich über SSH machen kann.
Ich freue mich total, dass du versuchst meine Anforderung mit in das neue Modul einzubauen. :)
Vielen Dank dafür! :)
Hallo,
gibts eine möglichkeit, ähnlich wie bei den setextentions oder bei den effekten einen Zeitraum für das Gain anzugeben?
würde das gerne nur tämporär ändern können.
Ansonsten - VIELEN DANK! funktioniert wunderbar
EDIT: Ok ist den Aufwand nicht Wert- ich änder das einfach über ein AT wieder zurück.
Gruß,
Kuzl
Zitat von: Kuzl am 24 Juni 2016, 23:00:39
Hallo,
gibts eine möglichkeit, ähnlich wie bei den setextentions oder bei den effekten einen Zeitraum für das Gain anzugeben?
würde das gerne nur tämporär ändern können.
Ansonsten - VIELEN DANK! funktioniert wunderbar
Das geht leider bei den Transformationen nicht. Dort gibt es keine Dauer die man übergeben kann.
Und BITTE, gerne. Ich habe gerade Spaß am Perl Coden lernen und dabei noch ein (hoffentlich) tolles Modul auf die Beine zu stellen.
Zitat von: Kuzl am 24 Juni 2016, 23:00:39
EDIT: Ok ist den Aufwand nicht Wert- ich änder das einfach über ein AT wieder zurück.
Das ist eine Möglichkeit! Eine weitere wäre (so mache ich es):
Ich habe alles über LightScene konfiguriert. Per Notify überwache ich dann die LightScene und dann gibt es ein jeweils entsprechendes set valueGain auf das Ambilight für unterschiedliche Helligkeitswerte im Wohnzimmer.
BTW: Das neue und erweiterte Modul ist fast fertig. Es fehlt noch eine Funktion und dann gebe ich mal eine erste Beta Version zum Testen heraus. Die Quellenumschaltung für lokale und remote Hosts wird auch mit dabei sein.
Gruß
Dan
Eine erste Version des völlig neu geschriebenen Moduls ist nun verfügbar (inklusive Quellenumschaltung).
Dafür habe ich ein komplett neues Thema aufgemacht.
Zu finden ist es nun hier:
https://forum.fhem.de/index.php/topic,55112.0.html
Würde mich freuen wenn das Modul mal jemand testet und Feedback gibt.
Gruß
Dan