Ich habe folgende Definitionen erstellt:
define do_HUEDevice3_on notify HUEDevice3:on {funktion("var1", "var2")}
define do_HUEDevice3_off notify HUEDevice3:off {funktion("var1", "var2")}
define do_HUEDevice3_dim notify HUEDevice3:dim.* {funktion("var1", "var2")}
Damit möchte ich immer in eine bestimmte Funktion gehen, wenn ich für diese Lampe etwas ändere. Unter state sieht man den wert und im Log wird das auch getriggert.
2018-03-11 15:43:00 HUEDevice HUEDevice3 reachable: 1
2018-03-11 15:43:00 HUEDevice HUEDevice3 onoff: 0
2018-03-11 15:43:00 HUEDevice HUEDevice3 pct: 0
2018-03-11 15:43:00 HUEDevice HUEDevice3 off
Was mache ich falsch?
Eventmonitor öffnen und schauen welche Events tatsächlich kommen...
Durch markieren der jewiligen Zeile und modify/create kannst du dir das Notify anlegen lassen...
Kurz da Handy...
Gruß, Joachim
Das habe ich beim Ausschalten im Eventmonitor gesehen:
2018-03-11 15:43:00 HUEDevice HUEDevice3 reachable: 1
2018-03-11 15:43:00 HUEDevice HUEDevice3 onoff: 0
2018-03-11 15:43:00 HUEDevice HUEDevice3 pct: 0
2018-03-11 15:43:00 HUEDevice HUEDevice3 off
In der letzten Zeile ist wenn ich das richtig verstehe der Status, der das notify triggert. In diesem Fall also off. Dann müsste doch
define do_HUEDevice3_off notify HUEDevice3:off {funktion("var1", "var2")}
auslösen?
Ja sieht so aus.
Ich kann es nachher mal probieren...
Trotzdem: was passiert, wenn du einfach die letzte Zeile im Eventmonitor markierst und auch create/modify gehst.
Dann wird dir das passende Notify doch erzeugt.
Das kannst du dann anpassen...
Gruß, Joachim
define do_HUEDevice3_off notify HUEDevice3.off {funktion("var1", "var2")}
@Joachim
Mit Create/Modify bekomme ich das:
define HUEDevice3_notify_1 notify HUEDevice3:off {}
Das ist doch das, was ich gemacht habe......
@MadMax
Den einzigen Unterschied, den ich sehe, ist, dass Du HUEDevice3:off durchHUEDevice3.off ersetzt hast, also den : durch einen Punkt. Das habe ich ausprobiert und ich bekomme das gleiche Ergebnis, Die Funktion wird nicht aufgerufen.
Dann sollten wir Mal etwas genauer schauen.
Wird das notify nicht getriggert oder hast du Probleme mit Deiner Funktion?
Bitte ein list des Notify hier posten.
Hi,
was passiert wenn du {funktion("var1", "var2")}
oben in die FHEM Kommanozeile wirst und ausführst?
Alternativ schreibst Du anstatt dessen dies in Dein notify:
{ Log 1, "Hier kommt der Event: $EVENT"}
Und schaust im Log was passiert.
Gruß Otto
Mein Logfile:
define FileLog_HUEDevice3 FileLog ./log/Licht_HUEDevice3-%Y.log HUEDevice3
attr FileLog_HUEDevice3 logtype text
Meine Notify-Definitionen:
define do_HUEDevice3_on notify HUEDevice3:on { Log 1, "Hier kommt der Event: $EVENT"}
define do_HUEDevice3_off notify HUEDevice3:off { Log 1, "Hier kommt der Event: $EVENT"}
define do_HUEDevice3_dim notify HUEDevice3:dim.* { Log 1, "Hier kommt der Event: $EVENT"}
Meine Logbucheinträge nach Aus, Ein und Dimmen:
2018-03-11_19:47:11 HUEDevice3 colormode: xy
2018-03-11_19:47:11 HUEDevice3 bri: 145
2018-03-11_19:47:11 HUEDevice3 ct: 443 (2257K)
2018-03-11_19:47:11 HUEDevice3 hue: 7676
2018-03-11_19:47:11 HUEDevice3 sat: 199
2018-03-11_19:47:11 HUEDevice3 xy: 0.5016,0.4151
2018-03-11_19:47:11 HUEDevice3 reachable: 1
2018-03-11_19:47:11 HUEDevice3 alert: select
2018-03-11_19:47:11 HUEDevice3 effect: none
2018-03-11_19:47:11 HUEDevice3 onoff: 1
2018-03-11_19:47:11 HUEDevice3 pct: 57
2018-03-11_19:47:11 HUEDevice3 dim56%
2018-03-11_19:47:11 HUEDevice3 rgb: ba7b20
2018-03-11_19:47:20 HUEDevice3 reachable: 1
2018-03-11_19:47:20 HUEDevice3 onoff: 0
2018-03-11_19:47:20 HUEDevice3 pct: 0
2018-03-11_19:47:20 HUEDevice3 off
2018-03-11_19:47:24 HUEDevice3 reachable: 1
2018-03-11_19:47:24 HUEDevice3 onoff: 1
2018-03-11_19:47:24 HUEDevice3 pct: 57
2018-03-11_19:47:24 HUEDevice3 dim56%
2018-03-11_19:47:27 HUEDevice3 bri: 58
2018-03-11_19:47:27 HUEDevice3 reachable: 1
2018-03-11_19:47:27 HUEDevice3 pct: 23
2018-03-11_19:47:27 HUEDevice3 dim25%
2018-03-11_19:47:27 HUEDevice3 rgb: 4a310d
Komischerweise finde ich den Text "Hier kommt der Event" nirgendwo.
Wenn ich meine Funktion in der FHEM-Kommandozeile eingebe, dann bekomme ich alle Meldungen wie in der Funktion definiert ausgegeben und die Funktion macht was sie soll.
Ich habe ein Dummydevice unter den HM-Lichtquellen definiert, damit dort auch die HUE-Lampen ein- und ausgeschaltet werden können und dort soll der Status übertragen werden, wenn ich bei den HUE-Lampen die Werte verändere.
define HUE_Licht_Salon_Etage_Stehlampe_statusRequest notify HUE_Licht_Salon_Etage_Stehlampe:statusRequest {funktion("var1", "var2")}
Das funktioniert einwandfrei. Drücke ich auf StatusRequest, dann bekomme ich den aktuellen Wert angezeigt. Die Funktion ist also OK.
Zu viel für meine Nerven. Lieber Otto würdest Du bitte. Danke. Bekommst ein Bier.
lol
Probier das hier:
define do_HUEDevice3_on notify HUEDevice3:onoff:1 { Log 1, "Hier kommt der On Event: $EVENT"}
define do_HUEDevice3_off notify HUEDevice3:onoff:0 { Log 1, "Hier kommt der Off Event: $EVENT"}
define do_HUEDevice3_dim notify HUEDevice3:pct:.* { Log 1, "Hier kommt der Pct Event: $EVENT"}
Weiterlesen bitte dann hier (https://wiki.fhem.de/wiki/Notify#Regexp_wizard_-_FHEMWEB-unterst.C3.BCtzte_Anlage_eines_notify) ;)
Den Text der per Log geschrieben wird landet ja auch im "globalen" fhem Logfile...
Kurz, da Handy...
Gruß, Joachim
Hier sind einige Ausgaben aus dem Hauptlogbuch, die zeigen, dass der Event kommt:
2018.03.11 20:50:14 1: Hier kommt der Event: off
2018.03.11 21:00:07 1: Hier kommt der Event: on
2018.03.11 21:03:37 1: Hier kommt der Event: dim50%
2018.03.11 21:18:17 1: Hier kommt der Event: dim06%
Diese Einträge führen zu keiner Ausgabe:
define do_HUEDevice3_on notify HUEDevice3:onoff:1 { Log 1, "Hier kommt der On Event: $EVENT"}
define do_HUEDevice3_off notify HUEDevice3:onoff:0 { Log 1, "Hier kommt der Off Event: $EVENT"}
define do_HUEDevice3_dim notify HUEDevice3:pct:.* { Log 1, "Hier kommt der Pct Event: $EVENT"}
*** Popcorn ***
In einem Event kommt immer nach dem Reading ein : und danach ein Leerzeichen bevor der Wert des Readings kommt! ;)
Also:
define do_HUEDevice3_on notify HUEDevice3:onoff:.1 { Log 1, "Hier kommt der On Event: $EVENT"}
define do_HUEDevice3_off notify HUEDevice3:onoff:.0 { Log 1, "Hier kommt der Off Event: $EVENT"}
define do_HUEDevice3_dim notify HUEDevice3:pct:.* { Log 1, "Hier kommt der Pct Event: $EVENT"}
sollte funktionieren.
Will man dass das notify das Reading "state" triggert (für on/off), dann ist es nötig das Attribut "addStateEvent" im notify zu setzen.
Gruß
Dan
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.
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
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
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.
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.
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.
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
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
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.
@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:
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", "")}
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}
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}?
Sorry Otto; hat sich überschnitten
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?
Wenn ich das { set_fhem_statusRequest_for_hue ("HUEGroup2", "") } in der Befehlszeile eingebe, dann erhalte ich die Logausgabe dieser Funktion auf dem Bildschirm
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 12:34:19 dim75%
L = 6 - Prozent = %
Status=75 - Summe=75 - I=1
Group=HUE_Licht_Salon_Etage_Stehlampe - Device=HUEDevice4 - Abfrage=HUEDevice4 2018-03-12 12:34:19 dim75%
L = 6 - Prozent = %
Status=75 - Summe=150 - I=2
Group=HUE_Licht_Salon_Etage_Stehlampe - Device=HUEDevice5 - Abfrage=HUEDevice5 2018-03-12 12:34:19 dim31%
L = 6 - Prozent = %
Status=31 - Summe=181 - I=3 - Durchschnitt-Status=56
Befehl = setstate HUE_Licht_Salon_Etage_Stehlampe dim56%@yellow
Aber der Status in HUE_Licht_Salon_Etage_Stehlampe ändert sich nicht. Lade ich aber die ganze Seite neu oder drücke ich auf statusRequest dann ändert sich der Status.
Das hatte ich Dir aber auch geschrieben glaube.
setstate löst kein Event aus und somit aktualisiert sich auch nicht die Seite automatisch.
Nimm lieber setreading
Wozu greifst Du eigentlich auf die Datenbank zu?
$abfrage = fhem "list $hue_device state";
Mach daraus mal bitte
$abfrage = ReadingsVal($hue_device,'state','none');
Wenn Du schon so komplexe Perlscripte schreibst dann sollten wir auch versuchen auf Funktionsebene zu bleiben. Sprich die FHEM internen Funktionen direkt auf zu rufen.
ZitatDer Befehl setzt den STATE Eintrag des Gerätes direkt, ohne Ereignisse zu generieren oder ein Signal an das Gerät zu senden.
Also damit wird nur das
Internal STATE gesetzt! Nicht das
Reading state (welches meist in Folge STATE setzt)
Während set beim dummy sowieso direkt den state setzt :)
Das ist nicht einfach, besonders wenn dann noch viele immer wieder vom Status reden (auch in der Commandref :( ) - da weiß ich dann immer nicht: Status=STATE oder state? Wohl meistens ist STATE damit gemeint (die optische Anzeige)
Ich hoffe, ich habe nicht zur Verwirrung beigetragen ;D
Gruß Otto
Das ist geil mit dem setreading. Ich hatte es bisher noch niemals eingesetzt. Kaum macht man es richtig, schon geht es!!!! :-)
Das mit dem
$abfrage = ReadingsVal($hue_device,'state','none');
geht allerdings nicht.
Anyway, mein Problem ist gelöst. Vielen lieben Dank für eure Hilfe !!!!
bei wie vielen notifys bist du denn jetzt?
3 oder 6 ??
ich denke 1 würde am ende reichen, da du eh immer die gleiche funktion aufrufst und keine Unterscheidung des Events machst. (zumindest hab ich keinen gesehen....)
Nur mal so am Rande. Sollte mal Deine DB nicht vorhanden sein oder sie länger zum antworten brauchen wird Dein FHEM komplett blockiert.
Zitat von: CoolTux am 12 März 2018, 06:47:54
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 hättest uns allen viel Leid erspart!
du hättest es gleich so formatieren sollen ;D
Internals:
CFGFN ./FHEM/fhem-2-licht.cfg
ich hoffe dir ist bewusst, was du damit tust?
Mea culpa, wenn ich euch soviel Leid zugetan habe....
In der Tat tue ich andauern Dinge, die ich nicht verstehe und wo ich nicht weiß was ich tue. Das geht zu 99 % gut und mit den restlichen 1 % muss ich wohl leben. FHEM ist für mich ein Buch mit 7 Siegel, quasi esoterisch. Ich nutze es, weil ich nichts besseres kenne, weil es meinen Anforderungen entspricht und weil es viele "professionelle" Hilfe (besser als bei vielen professsionellen Anbietern) gibt. Aber verstehen... Ich fühle mich auch nach ca 2 Jahren Erfahrung immer noch als ein blutiger Anfänger. Das Teil ist so mächtig, das können nur die wirklichen Cracks vllständig verstehen. Und selbst Albert Einstein hatte wohl seine Relativitätstheorie nicht immer so ganz verstanden, so sagt man jedenfalls..... Da weiß ich auch nur, dass es sie gibt und dass die Zeit, die Ausdehnung und die Masse von der Geschwindigkeit abhängig sind.
Also, ich werde immer wieder Fehler machen. Nochmals sorry dafür.
Manche Dinge sind mir allerdings bewusst.
Z.B:
Internals:
CFGFN ./FHEM/fhem-2-licht.cfg
Ich habe meine cfg-Datei zur besseren Übersicht in 7 Dateien aufgeteilt und ja, ich editiere trotz aller guten Ratschläge meistens in den cfg-Dateien. Da kann ich dann die Ordnung halten, die ich bei über 100 Devices glaube zu benötigen.
Auch das mit der Datenbank ist eine bewusste Entscheidung. Ich bin professioneller Entwickler im Ruhestand und alle meine Projekte sind Datenbankbasiert gewesen. Das erspart mir bei den vielen Devices viele Menge Code. Wenn ich, was auch möglich wäre, stattdessen eine Configurationsdatei verwende, dann bin ich ebenfalls auf diese angewiesen. Im übrigen laufen alle meine Systeme unter VMWARE und sie werden regelmäßig gesichert. Und wenn ich mal einen Fehler habe, dann gehe ich auf den vorherigen Stand zurück. Außerdem sichere ich von Zeit zu Zeit neben den Snapshots auch die VMWare-Images, alle cfg-Dateien, das SQL-File und viele andere wichtige Dinge zusätzlich auf ein NAS. Also ich denke, die Datenbank ist völlig OK für meine Zwecke.
Trotzdem, vielen Dank nochmal, auch für euer Verständnis, dass ich manchmal etwas quer denke.
Ach ja, meine Testnotifys habe ich jetzt bis auf pct entfernt.
tut das createGroupReadings attribut nicht was du willst?
Eddie1104 für die Zukunft: schau Dir nochmal den Unterschied im Ergebnis zwischen
list $hue_device state
und {ReadingsVal($hue_device,'state','none')}
direkt in der Kommandozeile von FHEM an.
Du darfst nicht einfach ein Stück Code aus der Empfehlung direkt ohne Prüfung übernehmen! Da gehört zwischen Copy und Paste immer noch das Ding zwischen den Ohren :)
Ich denke mal, in Deiner Funktion sparst Du durch die Empfehlung von Leon diesen Teil: ;D
$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);
Gruß Otto
Ah, OK. Es geht jetzt. Ist ja viel einfacher als ich es gemacht habe. Muss ich mir merken. Danke