Bei Hue Lampen funktioniert mein Notify nicht

Begonnen von eddie1104, 11 März 2018, 15:46:00

Vorheriges Thema - Nächstes Thema

eddie1104

Das kommt nach der Änderung jetzt:


2018.03.11 22:03:58 1: Hier kommt der Off Event: onoff: 0
2018.03.11 22:09:39 1: Hier kommt der Pct Event: pct: 86


Ich habe meine Notifydefinitionen so erweitert, dass Sie auch noch meine Funktion aufrufen.


define do_HUEDevice3_on2 notify HUEDevice3:onoff:.1 { Log 1, "Hier kommt der On Event: $EVENT"} ;; {fkt("var1", "var2")}
define do_HUEDevice3_off2 notify HUEDevice3:onoff:.0 { Log 1, "Hier kommt der Off Event: $EVENT"} ;; {fkt("va1r", "va2r")}
define do_HUEDevice3_dim2 notify HUEDevice3:pct:.* { Log 1, "Hier kommt der Pct Event: $EVENT"} ;; {fkt("var1", "var2")}
[/code]

Und ich sehe im Logbuch, dass er auch die Funktion ausführt. Das Ergebnis, z.B

setstate HUE_Licht_Salon_Etage_Deckenlampe off@white

wird im Logbuch angezeigt Aber dieser Befehl wird nicht ausgeführt.

So sieht der Code in der Funktion aus:


      $befehl = "setstate $fhem_hue_group $status";
      $ret = $ret . "\nBefehl = " . $befehl;
      fhem ("$befehl");


Alles ist richtig, nur es funktioniert trotzdem nicht. Grrrrr!!!! Ich gebe es auf für heute.

MadMax-FHEM

Warum postest du nicht was du wirklich hast, du rufst ja wohl nicht "fkt("var1","var2")" auf...
...mal abgesehen davon, dass du auch mal va1r und va2r schreibst...

Auch ist das ja wohl nicht die ganze Sub "fkt" die du gepostet hast...

Wie sollen wir da helfen?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Zitat von: CoolTux am 11 März 2018, 20:08:24
Zu viel für meine Nerven. Lieber Otto würdest Du bitte. Danke. Bekommst ein Bier.
War ja ein spannender Abend :) ich war im Kino  ;D
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

#18
Zitat von: Otto123 am 11 März 2018, 23:39:47
War ja ein spannender Abend :) ich war im Kino  ;D

Kino? Otto ich bitte Dich, das hier ist tausendmal besser  ;D
Ach hätte er doch nur ein vernünftiges list vom Notify gegeben als ich ihm drum bad, jeder hier hätte sich viel Zeit erspart.

Ich hoffe der Film war gut.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Ok letzter Versuch


Eddi poste bitte ein list vom Notify und die ganze Funktion. Also mit sub Name(
Bis hin zur letzten }

list DEVICENAME

das ist was gebraucht wird und nicht irgendwas aus deiner Konfigdatei.
Was ich dir jetzt schon sagen kann ist, das setstate kein Event auslöst. Solltest du also die Huegruppe in ein notify für andere Dinge verwenden wollen klappt das nicht. Das nur so an bei.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

eddie1104

Sorry CoolTux, ich hatte mal gelesen, nur das nötigste zu posten. Aber das ist wohl manchmal zu wenig. Hier mal die komplette Ausgabe der Funktion im Logbuch:


2018.03.12 09:55:20 3: do_HUEDevice5_dim return value: Funktionsaufruf : set_fhem_statusRequest_for_hue (HUEGroup2, )
fhem_hue_group = HUE_Licht_Salon_Etage_Stehlampe
SELECT * FROM fhem_hue_groups WHERE hue_group = 'HUEGroup2'
SELECT * FROM fhem_hue_devices WHERE fhem_hue_group = 'HUE_Licht_Salon_Etage_Stehlampe'
Group=HUE_Licht_Salon_Etage_Stehlampe - Device=HUEDevice3 - Abfrage=HUEDevice3           2018-03-12 09:55:20    dim50%
L = 6 - Prozent = %
Status=50 - Summe=50 - I=1
Group=HUE_Licht_Salon_Etage_Stehlampe - Device=HUEDevice4 - Abfrage=HUEDevice4           2018-03-12 09:55:20    dim50%
L = 6 - Prozent = %
Status=50 - Summe=100 - I=2
Group=HUE_Licht_Salon_Etage_Stehlampe - Device=HUEDevice5 - Abfrage=HUEDevice5           2018-03-12 09:55:20    dim50%
L = 6 - Prozent = %
Status=50 - Summe=150 - I=3 - Durchschnitt-Status=43
Befehl = setstate HUE_Licht_Salon_Etage_Stehlampe dim43%@yellow


Hier das Listing des HUE Devices:


Internals:
   CFGFN      ./FHEM/fhem-2-licht.cfg
   CHANGED   
   DEF        3  IODev=HUE_bridge_1
   ID         3
   INTERVAL   
   IODev      HUE_bridge_1
   NAME       HUEDevice3
   NR         915
   STATE      dim50%
   TYPE       HUEDevice
   manufacturername Philips
   modelid    LCT015
   name       Hue color lamp 1
   productid  Philips-LCT015-1-A19ECLv5
   swconfigid 3416C2DD
   swversion  1.29.0_r21169
   type       Extended color light
   uniqueid   00:17:88:01:03:81:04:ce-0b
   READINGS:
     2018-03-12 09:30:19   alert           select
     2018-03-12 09:55:20   bri             138
     2018-03-12 09:30:19   colormode       xy
     2018-03-12 09:30:19   ct              153 (6535K)
     2018-03-12 09:30:19   effect          none
     2018-03-12 09:30:19   hue             47104
     2018-03-12 09:55:20   onoff           1
     2018-03-12 09:55:20   pct             54
     2018-03-12 09:30:19   reachable       1
     2018-03-12 09:30:19   rgb             0905f9
     2018-03-12 09:30:19   sat             254
     2018-03-12 09:55:20   state           dim50%
     2018-03-12 09:30:19   xy              0.1532,0.0475
   helper:
     alert      select
     bri        138
     colormode  xy
     ct         153
     devtype   
     effect     none
     hue        47104
     pct        54
     reachable  1
     rgb        0905f9
     sat        254
     update_timeout -1
     xy         0.1532,0.0475
Attributes:
   IODev      HUE_bridge_1
   alias      Stehlampe Salon oben Licht 1
   color-icons 2
   devStateIcon {(HUEDevice_devStateIcon($name),"toggle")}
   group      Salon Etage
   icon       hue_filled_white_and_color_e27_b22
   model      LCT015
   room       1b HUE Licht
   sortby     20
   subType    extcolordimmer
   userattr   lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0
   webCmd     pct:rgb:rgb ff0000:rgb DEFF26:rgb 0000ff:ct 490:ct 380:ct 270:ct 160:toggle:on:off



Hier die Definition des Dummydevices, das ich updaten will:


define HUE_Licht_Salon_Etage_Stehlampe dummy
attr HUE_Licht_Salon_Etage_Stehlampe alias Salon Etage Stehlampe
attr HUE_Licht_Salon_Etage_Stehlampe cmdIcon on:on@yellow off:off@white statusRequest:rc_INFO toggle:toggle
attr HUE_Licht_Salon_Etage_Stehlampe devStateIcon on:on@yellow off:off@white unreachable:set_off set_toggle:toggle
attr HUE_Licht_Salon_Etage_Stehlampe group Beleuchtung Etage
attr HUE_Licht_Salon_Etage_Stehlampe icon scene_livingroom
attr HUE_Licht_Salon_Etage_Stehlampe room 1 Lichtsteuerung
attr HUE_Licht_Salon_Etage_Stehlampe sortby 30
attr HUE_Licht_Salon_Etage_Stehlampe webCmd statusRequest:toggle:on:off


Und hier der komplette Code der Funktion:


sub set_fhem_statusRequest_for_hue {

   my ($hue_group, $hue_device)=@_;
   my $ret = "Funktionsaufruf : set_fhem_statusRequest_for_hue ($hue_group, $hue_device)";
 
   my $pos = 0;
   my $l = 0;
   my $abfrage = "";
   my $status = "";
   my $befehl = "";
   my $fhem_hue_group = "";
   my $i = 0;
   my $summe = 0;
   my $prozent = "";
   my $dim = "";

   my $sth;
   my $query1 = "";
   my $query2 = "";

   use DBI;

   my $dbh = DBI->connect('DBI:mysql:fhem', 'fhem', 'Fhem123') || die "Could not connect to database: $DBI::errstr";
   my $do_upd = 0;

   $dbh->do("SET NAMES 'utf8'");
   $dbh->do("SET CHARACTER SET 'utf8'");


   if ($hue_device ne "")
   {
      $abfrage = fhem "list $hue_device state";
      $ret = $ret . $abfrage;

      $pos = index($abfrage, ":") + 6;
      $l = length($abfrage);
      $status = substr $abfrage, $pos, $l-$pos;
      $status = trim($status);

      $ret = $ret . "Status = " . $status;
     
      $query1 = "SELECT * FROM fhem_hue_devices WHERE hue_device = '$hue_device'";
      $sth = $dbh->prepare($query1);

      $sth->execute();
                     
      while (my @row = $sth->fetchrow_array)
      {
         $fhem_hue_group = $row[0];
      }

      $befehl = "setstate $fhem_hue_group $status\@yellow";
      $ret = $ret . "Befehl = " . $befehl;
      fhem ("$befehl");
   }

   if ($hue_group ne "")
   {     
      $query1 = "SELECT * FROM fhem_hue_groups WHERE hue_group = '$hue_group'";
      $sth = $dbh->prepare($query1);

      $sth->execute();

      while (my @row = $sth->fetchrow_array)
      {
         $fhem_hue_group = $row[0];
      }

      $ret = $ret . "\nfhem_hue_group = " . $fhem_hue_group;

      $query2 = "SELECT * FROM fhem_hue_devices WHERE fhem_hue_group = '$fhem_hue_group'";
      $sth = $dbh->prepare($query2);

      $ret = $ret . "\n$query1\n$query2";

      $i = 0;
      $summe = 0;

      $sth->execute();                     
      while (my @row = $sth->fetchrow_array)
      {
         $fhem_hue_group = $row[0];
         $hue_device = $row[3];

         $abfrage = fhem "list $hue_device state";
         $ret = $ret . "\nGroup=$fhem_hue_group - Device=$hue_device - Abfrage=$abfrage";

         $pos = index($abfrage, ":") + 6;
         $l = length($abfrage);
         $status = substr $abfrage, $pos, $l-$pos;
         $status = trim($status);

         if ($status eq "on")
         {
             $status = "100";
         }

         if ($status eq "off")
         {
             $status = "0";
         }

         $l = length($status);

         $prozent = substr $status, $l-1, 1;
         $ret = $ret . "L = $l - Prozent = $prozent";

         if ($prozent eq "%")
         {
             $status = substr $status, 3, $l-4;
         }

         $summe = $summe + $status;
         $i = $i + 1;

         $ret = $ret . "\nStatus=$status - Summe=$summe - I=$i";

      }

      $dim = $summe / $i;
      $dim = get_dim($dim);

      $ret = $ret . " - Durchschnitt-Status=$dim";

      if ($dim > 0 and $dim < 100)
      {
         $status = "dim" . $dim . "%\@yellow";
      }
      else
      {
         if ($dim == 100)
         {
            $status = "on\@yellow";
         }

         if ($dim == 0)
         {
            $status = "off\@white";
         }
      }

      $befehl = "setstate $fhem_hue_group $status";
      $ret = $ret . "\nBefehl = " . $befehl;
      fhem ("$befehl");
   }

   return $ret;
}


Anyway, die Funktion macht was sie soll, ich rufe die gleiche Funktion auch so auf:


define HUE_Licht_Salon_Etage_Stehlampe_statusRequest notify HUE_Licht_Salon_Etage_Stehlampe:statusRequest {set_fhem_statusRequest_for_hue ("HUEGroup2", "")}


Das funktioniert einwandfrei. Und wenn ich die Funktion oder das


setstate HUE_Licht_Salon_Etage_Stehlampe dim43%@yellow


in der Befehlszeile eingebe, geht auch alles einwandfrei. Nur über das HUE-Device geht es nicht. Das ist mir absolut unerklärlich.

CoolTux

Ich wollte doch nur die Funktion. (die haben wir ja nun) und ein list des Notify welches die Funktion aufruft. (haben wir noch nicht)

Und bitte immer und bei allen Devices ein list und keine definition
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Zitat von: CoolTux am 12 März 2018, 05:35:33
Ich hoffe der Film war gut.
Moin,

Der Film war gut! -> Das schweigende Klassenzimmer.

Zum Thema, wenn ich den letzten Stand von Eddie1104 richtig verstanden habe, triggert das notify, er kann dort verschiedene Auslöser angeben, seine Funktion wird ausgeführt, aber letztendlich klappt die Ausführung der Befehle am Schluss der Funktion nicht?!

Ich würde jetzt die Variable $befehl ins Log schreiben. Der Logauszug offenbar von dem $ret der Funktion erscheint mir zu unübersichtlich, die Funktion ist so komplex, das kann keiner von uns nachvollziehen.

@Eddie1104 Es gab immer mal welche die posten einfach das komplette Logfile des letzten Monats mit verbose 5. Das will keiner durchsuchen. Aber wenn Info zu Geräten nötig sind, ist es immer wichtig ein komplettes list (manchmal zu einem konkreten Zustand) zu posten.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

Ich glaube das er einfach im Notify die variablen Übergabe falsch hat

Zitat
define HUE_Licht_Salon_Etage_Stehlampe_statusRequest notify HUE_Licht_Salon_Etage_Stehlampe:statusRequest {set_fhem_statusRequest_for_hue ("HUEGroup2", "")}


Hier schient es zu klappen. Kann mich aber erinnern das er im anderen notify es anders hatte, mit variablen. Deswegen brauche ich ein list des aktuellen notify




Übrigens super toller Film.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

eddie1104

@Otto

Ich schreibe ja $befehl ins Logfile mit


      $ret = $ret . "\nBefehl = " . $befehl;


Und am Ende mit

return $ret


@CoolTux:

Ich habe zum Testen 6 verschiedene Notifys, normalerweise bräuchte ich ja nur pct triggern:


Internals:
   CFGFN      ./FHEM/fhem-2-licht.cfg
   DEF        HUEDevice3:on { Log 1, "Hier kommt der Event: $EVENT"} ; {set_fhem_statusRequest_for_hue ("HUEGroup2", "")}
   NAME       do_HUEDevice3_on
   NOTIFYDEV  HUEDevice3
   NR         923
   NTFY_ORDER 50-do_HUEDevice3_on
   REGEXP     HUEDevice3:on
   STATE      active
   TYPE       notify
   READINGS:
     2018-03-12 09:30:10   state           active
Attributes:
   addStateEvent 1
   room       9 HUE Geräte



Internals:
   CFGFN      ./FHEM/fhem-2-licht.cfg
   DEF        HUEDevice3:off { Log 1, "Hier kommt der Event: $EVENT"} ; {set_fhem_statusRequest_for_hue ("HUEGroup2", "")}
   NAME       do_HUEDevice3_off
   NOTIFYDEV  HUEDevice3
   NR         924
   NTFY_ORDER 50-do_HUEDevice3_off
   REGEXP     HUEDevice3:off
   STATE      2018-03-12 09:30:19
   TYPE       notify
   READINGS:
     2018-03-12 09:30:10   state           active
Attributes:



Internals:
   CFGFN      ./FHEM/fhem-2-licht.cfg
   DEF        HUEDevice3:dim.* { Log 1, "Hier kommt der Event: $EVENT"} ; {set_fhem_statusRequest_for_hue ("HUEGroup2", "")}
   NAME       do_HUEDevice3_dim
   NOTIFYDEV  HUEDevice3
   NR         925
   NTFY_ORDER 50-do_HUEDevice3_dim
   REGEXP     HUEDevice3:dim.*
   STATE      2018-03-12 09:55:20
   TYPE       notify
   READINGS:
     2018-03-12 09:30:10   state           active
Attributes:



Internals:
   CFGFN      ./FHEM/fhem-2-licht.cfg
   DEF        HUEDevice3:onoff:.1 { Log 1, "Hier kommt der On Event: $EVENT"} ; {set_fhem_statusRequest_for_hue ("HUEGroup2", "")}
   NAME       do_HUEDevice3_on2
   NOTIFYDEV  HUEDevice3
   NR         926
   NTFY_ORDER 50-do_HUEDevice3_on2
   REGEXP     HUEDevice3:onoff:.1
   STATE      2018-03-12 09:55:20
   TYPE       notify
   READINGS:
     2018-03-12 09:30:10   state           active
Attributes:


Internals:
   CFGFN      ./FHEM/fhem-2-licht.cfg
   DEF        HUEDevice3:onoff:.0 { Log 1, "Hier kommt der Off Event: $EVENT"} ; {set_fhem_statusRequest_for_hue ("HUEGroup2", "")}
   NAME       do_HUEDevice3_off2
   NOTIFYDEV  HUEDevice3
   NR         927
   NTFY_ORDER 50-do_HUEDevice3_off2
   REGEXP     HUEDevice3:onoff:.0
   STATE      2018-03-12 09:30:19
   TYPE       notify
   READINGS:
     2018-03-12 09:30:10   state           active
Attributes:


Internals:
   CFGFN      ./FHEM/fhem-2-licht.cfg
   DEF        HUEDevice3:pct:.* { Log 1, "Hier kommt der Pct Event: $EVENT"} ; {set_fhem_statusRequest_for_hue ("HUEGroup2", "")}
   NAME       do_HUEDevice3_dim2
   NOTIFYDEV  HUEDevice3
   NR         928
   NTFY_ORDER 50-do_HUEDevice3_dim2
   REGEXP     HUEDevice3:pct:.*
   STATE      2018-03-12 09:55:20
   TYPE       notify
   READINGS:
     2018-03-12 09:30:10   state           active
Attributes:



CoolTux

Aber die sind doch alle kompletter Unfug


HUEDevice3:off { Log 1, "Hier kommt der Event: $EVENT"} ; {set_fhem_statusRequest_for_hue ("HUEGroup2", "")}



Wenn dann

HUEDevice3:off { Log 1, "Hier kommt der Event: $EVENT"; set_fhem_statusRequest_for_hue ("HUEGroup2", "")}
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

#26
Naja vielleicht nicht minimal, aber kompletter Unfug?
Ich war mir nicht ganz sicher und habe das gerade mal probiert, man kann schon im Ausführungsteil so etwas machen
{PerlBefehl1}; {PerlBefehl2}
Ist im Ergebnis gleich dem
{PerlBefehl1 ; PerlBefehl2}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

eddie1104

Ich habe jetzt alles 6 notifys so wie gesagt geändert:


Internals:
   CFGFN      ./FHEM/fhem-2-licht.cfg
   DEF        HUEDevice3:off { Log 1, "Hier kommt der Event: $EVENT"} ; {set_fhem_statusRequest_for_hue ("HUEGroup2", "")}
   NAME       do_HUEDevice3_off
   NOTIFYDEV  HUEDevice3
   NR         924
   NTFY_ORDER 50-do_HUEDevice3_off
   REGEXP     HUEDevice3:off
   STATE      2018-03-12 11:55:25
   TYPE       notify
   READINGS:
     2018-03-12 09:30:10   state           active
Attributes:


Ändern tut das nichts. Das Verhalten bleibt gleich.

Ich verstehe aber nicht, warum es nicht möglich sein sollte, mehrere perl befehle mit {perl1} ;; {perl2} zu verketten. Das sollte doch das selbe sein wie {perl1 ;; perl2}?

eddie1104


CoolTux

Ist es laut Otto wohl auch.

Verstehe aber nicht wieso das
define HUE_Licht_Salon_Etage_Stehlampe_statusRequest notify HUE_Licht_Salon_Etage_Stehlampe:statusRequest {set_fhem_statusRequest_for_hue ("HUEGroup2", "")}
gehen soll aber das
HUEDevice3:off { Log 1, "Hier kommt der Event: $EVENT"} ; {set_fhem_statusRequest_for_hue ("HUEGroup2", "")}
nicht obwohl das notify nachweißlich triggert.



Was passiert denn wenn Du oben im FHEMWEB in der Befehlszeile das
{ set_fhem_statusRequest_for_hue ("HUEGroup2", "") }
ein gibst?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net