Neues Modul für Hyperion Server 98_Hyperion.pm

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

Vorheriges Thema - Nächstes Thema

adn77

Zitat von: Schlimbo am 26 Oktober 2017, 15:20:00
... da über UDP in diesem Fall ständig Daten kommen hat UDP immer das letzte Wort.

Mir ging das ständige geflackere der Netzwerk LED auf den Geist, dehalb habe ich Hyperion auf Kodi standardmäßig ausgeschaltet und starte es automatisch beim Filmstart per service.kodi.callbacks.

DeeSPe

Klappt denn jetzt alles wie gewünscht mit dem Modul aus #457?
Dann würde ich das heute so 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

Schlimbo


DeeSPe

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

adn77

sorry, hab gerade erst noch eine Kleinigkeit gefunden. Du hast statt
$buf =~ s/[\r|\n]//gm;
$buf =~ s/[\r\n]//gm;
geschrieben.
Sollte jemand ein UNIX oder MAC Zeilenende schicken, würde das nicht gematcht

adn77

#470
wart mal noch mit dem Veröffentlichen - ich glaube du hast ein bischen viel auf einmal geändert...
bisher habe ich noch folgende Punkte:
"aus" zeigt nicht die ausgeschaltete Lampe als Icon
"DimUp" macht ein "DimDown"
"before_off" Modus wird beim Einschalten nicht wiederhergestellt (wenn before_off = effect)

Ich habe nochmal alle Änderungen rückgängig gemacht. Hier wäre mein Patch mit minimalem Eingiff in dein Modul
--- FHEM/98_Hyperion.pm.orig    2017-10-19 20:32:57.753505917 +0200
+++ FHEM/98_Hyperion.pm 2017-10-26 22:52:20.295887944 +0200
@@ -208,17 +208,17 @@
   return if (!$buf);
   my $result  = $hash->{PARTIAL} ? $hash->{PARTIAL}.$buf : $buf;
   $hash->{PARTIAL} = $result;
-  return if ($buf !~ /(^.+"success":(true|false)\}$)/);
+  return if ($buf !~ /(^.+"success":(true|false)\})/);
   Log3 $name,5,"$name: url $hash->{DeviceName} returned result: $result";
   delete $hash->{PARTIAL};
-  $result =~ /(\s+)?\/{2,}.*|(?:[\t ]*(?:\r?\n|\r))+/gm;
-  if ($result =~ /^\{"success":true\}$/)
+  $result =~ s/[\r|\n]//gm;
+  if ($result =~ /^\{"success":true\}/)
   {
     fhem "sleep 1; get $name statusRequest"
       if (AttrVal($name,"queryAfterSet",1) == 1 || !$hash->{INTERVAL});
     return;
   }
-  elsif ($result =~ /^\{"info":\{.+\},"success":true\}$/)
+  elsif ($result =~ /^\{"info":\{.+\},"success":true\}/)
   {
     my $obj         = eval {decode_json($result)};
     my $data        = $obj->{info};
@@ -253,6 +253,7 @@
     $duration       = ($duration) >= 1 ? $duration : "infinite";
     my $adj         = $data->{adjustment}->[0] ? $data->{adjustment}->[0] : undef;
     my $col         = $data->{activeLedColor}->[0]->{"HEX Value"}->[0] ? $data->{activeLedColor}->[0]->{"HEX Value"}->[0] : "";
+    if ( $col =~ /000000/ ){ $col = ""; }
     my $configs     = ReadingsVal($name,".configs",undef);
     my $corr        = $data->{correction}->[0] ? $data->{correction}->[0] : undef;
     my $effects     = $data->{effects} ? $data->{effects} : undef;
@@ -931,7 +932,7 @@
   return ".*:off:toggle"
     if (Value($name) eq "off");
   return ".*:light_exclamation"
-    if (Value($name) =~ /^(ERROR|disconnected)$/);
+    if ( (Value($name) =~ /^(ERROR|disconnected)$/ && !$hash->{INTERVAL}) || (Value($name) =~ /^(ERROR)$/ && $hash->{INTERVAL}) );
   return ".*:light_light_dim_$ico@#".$rgb.":toggle"
     if (Value($name) ne "off" && ReadingsVal($name,"mode","") eq "rgb");
   return ".*:light_led_stripe_rgb@#FFFF00:toggle"


Behebt alle Fehler und beinhaltet die besprochenen Änderungen.

DeeSPe

#471
Zitat von: adn77 am 26 Oktober 2017, 22:22:19
"aus" zeigt nicht die ausgeschaltete Lampe als Icon

Das funktioniert bei mir, daran wurde nichts verändert.

Zitat von: adn77 am 26 Oktober 2017, 22:22:19
"DimUp" macht ein "DimDown"

Ist gefixt.

Zitat von: adn77 am 26 Oktober 2017, 22:22:19
"before_off" Modus wird beim Einschalten nicht wiederhergestellt (wenn before_off = effect)

Das funktioniert bei mir auch, daran wurde auch nichts verändert.

Zitat von: adn77 am 26 Oktober 2017, 22:22:19
Ich habe nochmal alle Änderungen rückgängig gemacht. Hier wäre mein Patch mit minimalem Eingiff in dein Modul
--- FHEM/98_Hyperion.pm.orig    2017-10-19 20:32:57.753505917 +0200
+++ FHEM/98_Hyperion.pm 2017-10-26 22:52:20.295887944 +0200
@@ -208,17 +208,17 @@
   return if (!$buf);
   my $result  = $hash->{PARTIAL} ? $hash->{PARTIAL}.$buf : $buf;
   $hash->{PARTIAL} = $result;
-  return if ($buf !~ /(^.+"success":(true|false)\}$)/);
+  return if ($buf !~ /(^.+"success":(true|false)\})/);
   Log3 $name,5,"$name: url $hash->{DeviceName} returned result: $result";
   delete $hash->{PARTIAL};
-  $result =~ /(\s+)?\/{2,}.*|(?:[\t ]*(?:\r?\n|\r))+/gm;
-  if ($result =~ /^\{"success":true\}$/)
+  $result =~ s/[\r|\n]//gm;
+  if ($result =~ /^\{"success":true\}/)
   {
     fhem "sleep 1; get $name statusRequest"
       if (AttrVal($name,"queryAfterSet",1) == 1 || !$hash->{INTERVAL});
     return;
   }
-  elsif ($result =~ /^\{"info":\{.+\},"success":true\}$/)
+  elsif ($result =~ /^\{"info":\{.+\},"success":true\}/)
   {
     my $obj         = eval {decode_json($result)};
     my $data        = $obj->{info};
@@ -253,6 +253,7 @@
     $duration       = ($duration) >= 1 ? $duration : "infinite";
     my $adj         = $data->{adjustment}->[0] ? $data->{adjustment}->[0] : undef;
     my $col         = $data->{activeLedColor}->[0]->{"HEX Value"}->[0] ? $data->{activeLedColor}->[0]->{"HEX Value"}->[0] : "";
+    if ( $col =~ /000000/ ){ $col = ""; }
     my $configs     = ReadingsVal($name,".configs",undef);
     my $corr        = $data->{correction}->[0] ? $data->{correction}->[0] : undef;
     my $effects     = $data->{effects} ? $data->{effects} : undef;
@@ -931,7 +932,7 @@
   return ".*:off:toggle"
     if (Value($name) eq "off");
   return ".*:light_exclamation"
-    if (Value($name) =~ /^(ERROR|disconnected)$/);
+    if ( (Value($name) =~ /^(ERROR|disconnected)$/ && !$hash->{INTERVAL}) || (Value($name) =~ /^(ERROR)$/ && $hash->{INTERVAL}) );
   return ".*:light_light_dim_$ico@#".$rgb.":toggle"
     if (Value($name) ne "off" && ReadingsVal($name,"mode","") eq "rgb");
   return ".*:light_led_stripe_rgb@#FFFF00:toggle"


Behebt alle Fehler und beinhaltet die besprochenen Änderungen.

Wie gesagt, ich mag RegEx so streng wie möglich und werde es deshalb bei meiner Version belassen, das sollte keine Probleme geben.
Die Änderung an Hyperion_devStateIcon habe ich noch so übernommen.

Zitat von: adn77 am 26 Oktober 2017, 22:08:01
$buf =~ s/[\r|\n]//gm;

Was das soll verstehe ich nicht!
Alles was in eckigen Klammern ist bedeutet dass es matcht, ein | dazwischen ist unnötig/falsch.

Anbei nochmal eine aktualisierte Version.

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

Zitat von: adn77 am 26 Oktober 2017, 22:22:19
"aus" zeigt nicht die ausgeschaltete Lampe als Icon
..
"before_off" Modus wird beim Einschalten nicht wiederhergestellt (wenn before_off = effect)
Habe es gerade auch noch mal getestet.
Die von Alex genannten Fehler treten auch bei mir auf, aber nur bei der ESP-Version, bei meinem Raspberry-Hyperion funktioniert es. Sorry, da war ich wohl etwas nachlässig beim testen.

DeeSPe

Zitat von: Schlimbo am 27 Oktober 2017, 12:06:47
Habe es gerade auch noch mal getestet.
Die von Alex genannten Fehler treten auch bei mir auf, aber nur bei der ESP-Version, bei meinem Raspberry-Hyperion funktioniert es. Sorry, da war ich wohl etwas nachlässig beim testen.


Was wird denn statt dessen bei "off" bei Euch angezeigt?
Auf was steht das Reading state bei "off"?

Das mit "mode_before_off" verstehe ich (noch) nicht.

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

Hier ein list nach dem "set off":
Internals:
   DEF        192.168.5.72 19444 0
   DeviceName 192.168.5.72:19444
   FD         9
   IP         192.168.5.72
   NAME       ESPHyperion
   NOTIFYDEV  global
   NR         97
   NTFY_ORDER 50-ESPHyperion
   PARTIAL
   PORT       19444
   STATE      rgb 000000
   TYPE       Hyperion
   hostname   ESP-Hyperion
   READINGS:
     2017-10-27 12:32:33   blacklevel      0.00,0.00,0.00
     2017-10-27 12:32:33   dim             0
     2017-10-27 12:32:33   duration        infinite
     2017-10-27 11:51:13   effect          Fire_2012
     2017-10-27 11:51:13   effectArgs      {"speed":62.5}
     2017-10-27 12:32:33   gamma           1.00,1.00,1.00
     2017-10-27 12:32:33   id              default
     2017-10-27 12:32:33   mode            rgb
     2017-10-27 12:32:33   mode_before_off rgb
     2017-10-27 12:32:33   priority
     2017-10-27 11:51:35   rgb             363cff
     2017-10-27 12:32:33   saturationGain  1.00
     2017-10-27 12:32:33   serverResponse  success
     2017-10-27 12:32:33   state           rgb 000000
     2017-10-27 12:32:33   threshold       0.00,0.00,0.00
     2017-10-27 12:32:33   valueGain       1.00
     2017-10-27 12:32:33   whitelevel      1.00,1.00,1.00
   helper:
Attributes:
   alias      Ambilight
   cmdIcon    on:general_an off:general_aus dimDown:dimdown dimUp:dimup
   devStateIcon {(Hyperion_devStateIcon($name),"toggle")}
   event-on-change-reading .*
   group      colordimmer
   homebridgeMapping On=state,subtype=TV.Licht,valueOn=/rgb.*/,cmdOff=off,cmdOn=mode+rgb On=state,subtype=Umgebungslicht,valueOn=clearall,cmdOff=off,cmdOn=clearall On=state,subtype=Effekt,valueOn=/effect.*/,cmdOff=off,cmdOn=mode+effect
   hyperionVersionCheck 0
   icon       light_led_stripe_rgb
   lightSceneParamsToSave state
   room       Hyperion
   userattr   homebridgeMapping:textField-long lightSceneParamsToSave
   verbose    5
   webCmd     rgb:effect:mode:dimDown:dimUp:on:off
   widgetOverride dimUp:noArg dimDown:noArg

DeeSPe

#475
Zitat von: Schlimbo am 27 Oktober 2017, 12:36:11
Hier ein list nach dem "set off":
Internals:
   DEF        192.168.5.72 19444 0
   DeviceName 192.168.5.72:19444
   FD         9
   IP         192.168.5.72
   NAME       ESPHyperion
   NOTIFYDEV  global
   NR         97
   NTFY_ORDER 50-ESPHyperion
   PARTIAL
   PORT       19444
   STATE      rgb 000000
   TYPE       Hyperion
   hostname   ESP-Hyperion
   READINGS:
     2017-10-27 12:32:33   blacklevel      0.00,0.00,0.00
     2017-10-27 12:32:33   dim             0
     2017-10-27 12:32:33   duration        infinite
     2017-10-27 11:51:13   effect          Fire_2012
     2017-10-27 11:51:13   effectArgs      {"speed":62.5}
     2017-10-27 12:32:33   gamma           1.00,1.00,1.00
     2017-10-27 12:32:33   id              default
     2017-10-27 12:32:33   mode            rgb
     2017-10-27 12:32:33   mode_before_off rgb
     2017-10-27 12:32:33   priority
     2017-10-27 11:51:35   rgb             363cff
     2017-10-27 12:32:33   saturationGain  1.00
     2017-10-27 12:32:33   serverResponse  success
     2017-10-27 12:32:33   state           rgb 000000
     2017-10-27 12:32:33   threshold       0.00,0.00,0.00
     2017-10-27 12:32:33   valueGain       1.00
     2017-10-27 12:32:33   whitelevel      1.00,1.00,1.00
   helper:
Attributes:
   alias      Ambilight
   cmdIcon    on:general_an off:general_aus dimDown:dimdown dimUp:dimup
   devStateIcon {(Hyperion_devStateIcon($name),"toggle")}
   event-on-change-reading .*
   group      colordimmer
   homebridgeMapping On=state,subtype=TV.Licht,valueOn=/rgb.*/,cmdOff=off,cmdOn=mode+rgb On=state,subtype=Umgebungslicht,valueOn=clearall,cmdOff=off,cmdOn=clearall On=state,subtype=Effekt,valueOn=/effect.*/,cmdOff=off,cmdOn=mode+effect
   hyperionVersionCheck 0
   icon       light_led_stripe_rgb
   lightSceneParamsToSave state
   room       Hyperion
   userattr   homebridgeMapping:textField-long lightSceneParamsToSave
   verbose    5
   webCmd     rgb:effect:mode:dimDown:dimUp:on:off
   widgetOverride dimUp:noArg dimDown:noArg


Danke.
Teste bitte noch einmal die angehängte Version.

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

Hallo Dan,
icon passt jetzt und mode_before_off klappt auch, kann aber erst morgen ausgiebig Testen, wenn ich wieder zuhause bin. (Über VPN und WebCam ist das etwas mühsam)

@Alex:
Werden von deinem Sketch auch die "effectArgs" ausgewertet?
Der "clearall" Befehl funktioniert bei mir auch noch nicht, bist du da noch dran?
Meinst du es wäre möglich von hier:
https://forum.fhem.de/index.php/topic,73949.msg656345.html#msg656345
noch ein paar Effekte zu "klauen" und in den Sketch mit zu übernehmen?

DeeSPe

Zitat von: Schlimbo am 27 Oktober 2017, 18:16:50
Hallo Dan,
icon passt jetzt und mode_before_off klappt auch, kann aber erst morgen ausgiebig Testen, wenn ich wieder zuhause bin. (Über VPN und WebCam ist das etwas mühsam)

Danke für die Rückmeldung, und verständlich dass das remote nicht so gut geht. ;)
Ich checke das erst mal so ein damit der dimDown Bug von gestern auch behoben ist.
Wenn noch was nicht klappen sollte, dann sagt einfach nochmal Bescheid.

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

FHEM-Wohnung

Hallo,

ich habe eine Frage zum Quellen umschalten.

Bei Kodi habe ich folgendes in der favourites.xml
<favourites>
    <favourite name="Ambilight für Kodi aktivieren" thumb="http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_kodi.jpg">System.Exec(&quot;/storage/.kodi/userdata/hyperion_kodi_aktivieren.sh&quot;)</favourite>
    <favourite name="Ambilight für externe Geräte aktivieren" thumb="http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_hdmi.jpg">System.Exec(&quot;/storage/.kodi/userdata/hyperion_grabber_aktivieren.sh&quot;)</favourite>
    <favourite name="Ambilight TV aktivieren" thumb="http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_kodi.jpg">System.Exec(&quot;/storage/.kodi/userdata/hyperion_scart_aktivieren.sh&quot;)</favourite>
    <favourite name="Ambilight ausschalten" thumb="http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_off.jpg">system.exec(&quot;/storage/.kodi/userdata/hyperion_beenden.sh&quot;)</favourite>
</favourites>


Wie kann ich die Quellen nun mit FHEM umschalten?

Danke :)

DeeSPe

Zitat von: FHEM-Wohnung am 29 Oktober 2017, 22:04:55
Hallo,

ich habe eine Frage zum Quellen umschalten.

Bei Kodi habe ich folgendes in der favourites.xml
<favourites>
    <favourite name="Ambilight für Kodi aktivieren" thumb="http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_kodi.jpg">System.Exec(&quot;/storage/.kodi/userdata/hyperion_kodi_aktivieren.sh&quot;)</favourite>
    <favourite name="Ambilight für externe Geräte aktivieren" thumb="http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_hdmi.jpg">System.Exec(&quot;/storage/.kodi/userdata/hyperion_grabber_aktivieren.sh&quot;)</favourite>
    <favourite name="Ambilight TV aktivieren" thumb="http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_kodi.jpg">System.Exec(&quot;/storage/.kodi/userdata/hyperion_scart_aktivieren.sh&quot;)</favourite>
    <favourite name="Ambilight ausschalten" thumb="http://powerpi.de/wp-content/uploads/powerpi/powerpi_ambi_thumb_off.jpg">system.exec(&quot;/storage/.kodi/userdata/hyperion_beenden.sh&quot;)</favourite>
</favourites>


Wie kann ich die Quellen nun mit FHEM umschalten?

Danke :)

Mit "get <NAME> configFiles" die verfügbaren Konfigurationsdateien einlesen und dann mit "set <NAME> configFile <DATEI>" die jeweilige Konfiguration setzen.

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