modul LightScene

Begonnen von justme1968, 05 März 2013, 00:17:46

Vorheriges Thema - Nächstes Thema

justme1968

sobald es ein kommando mit slider gibt wird dieses zum default. und hierbei wird nicht die alphabetische liste genommen :)

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

guiseppe


Hallo zusammen,

mein Problem:
meine Enocean Funk Dimmer von Eltako funktioniert mit dem LightScene Modul nicht richtig.

Zu meinem Setup:
Ich bin neu bei Fhem und Anfänger im Thema.
Hab seit ca. 8 Wochen eine Fritzbox 7390 mit Fhem und EnOncean USB Stick von Busware im Einsatz.
Ausser EnOcean Dimmer und Schalter von Eltako nutzte ich die Phillips Hue Lampen.

Zu meiner Frage:
Ich habe versucht eine LightScene mit Eltako Funk Schaltern, Funkdimmern und Phillips Hue aufzubauen.
Soweit so gut.
Allerdings hat das Aufrufen der Dimmer Werte meines Eltako FUD 61 NPN nicht geklappt.
Das Device verlangt nach meinem Verständnis nach einem Kommando >set DimmerLampe dim xyWert<
LightScene sendet aber folgendes >set DimmerLampe xyWert<. 
Der Value des Elatako Dimmers steht beim Auslesen, bzw. Speichern der Scene auf dem Dimmerwert [0..100], kann aber auch auf on oder off stehen.
Mit dem Attribut lightSceneParamsToSave  hab ich es lange probiert aber nicht hinbekommen, da ich wohl das Leerzeichen zwischen DimmerLampe und xyWert benötige.
In der commandref für das lightSceneParamsToSave   Attribut   heißt es:"this perl expression must not contain spaces,colons or commas"
Ich wollte wenn der Wert eine Zahl ist ein "dim" davorstellen, so dass z.B. ein Kommando dim 30 abgesetzt wird, wenn der Wert 30 war.


Aus lauter Verzweiflung hab ich mir mit Data::Dumper das Modul LightScene angeschaut und die "Sonderfälle" für die Hue Lampen gefunden.
Ich habe also einen Sonderfall für Enocean Dimmer ergänz und damit funktioniert es.
Kann mir jemand helfen was ich falsch machen oder gar meinen Code prüfen und in den Trunk übernehmen?

PS: Bin wie gesagt Anfäger.
Ich kenne ( nicht verwechseln mit kann) Perl und Fhem seit 8 Wochen.
Vielen Dank an alle Beteiligten: Tolle Arbeit!
Danke und viele Grüße
Guiseppe

justme1968

ich würde gerne auf diese sonderfälle verzichten so weit es geht und auch den hue sonderfall wieder entfernen. der ist noch aus der zeit als es das lightSceneParamsToSave nicht gab.

ich habe keine enocean devices und laut commandref ist da kein leerzeichen zwischen dim und dem wert.

wenn in state der zahlenwert steht aber beim setzen das dim kommando verwendet werden muss geht es so:attr <device> lightSceneParamsToSave state -> dimdamit wird state gelesen und beim setzen aber ein 'set dim wert' gemacht. wenn der aktuelle wert nicht in state sondern in einem anderen reading steht musst du das entsprechend ändern.

du kannst jede kombination aus reading oder set und get verwenden.

wenn das nicht reicht: im perl ausdrick selber darf zwar kein leerzeichen vorkommen, aber in der rückgabe des ausdruck. d.h. du rufst in lightSceneParamsToSave eine kleine sub aus 99_myUtils.pm auf die dann das gewünschte zurück gibt:state@{lcEnOceanDim($value)} und sub
lcEnOceanDim($)
{
  my ($value) = @_;

  return "dim $value" if( $value ~= m/\d+/ );

  return $value;
}

also ein dim vor den wert setzt wenn es eine zahl ist, ansonsten z.b. für on und off direkt den wert zurück gibt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

guiseppe

Hallo Andre
vielen Dank für die Antwort.
ich hab's jetzt ausprobiert.
Das mit dem "state -> dim" als lightSceneParamsToSave hat leider nicht geklappt. Es filtert ja auch die on / off / BI / B0 nicht raus.
Die gibts im  reading >state< auch noch hab ich mittlerweile gemerkt.
Im Log steht beim setzen der Lichtscene:
2014.01.06 20:18:55 5: SET: Usage: dim dim/% [rampTime/s lock|unlock]


Das sub in myUtils hat fast funktioniert.
ich vermute allerings das "~=" muss "=~" heissen.
sonst gibts zumindest beim mir einen syntax error.
( wie gesagt bin Anfänger kann sein das ich "dumme" Fragen stelle)
Hab 10 Jahre Matlab und rudimentäre C / Linux / C++ Kenntnisse
KEIN Perl bisher.

Was leider noch komisch aussieht, ist, dass die Scene bei get Scene einen zusammengesetzten String aus
dem Attribut von lightSceneParamsToSave und dem return des sub liefert.



>>get  WohnraumLichtSzenen scene machsGedimmt
liefert bei mir:
FhemLichtKueche: off
FhemLichtWohnz: state@{lcEnOceanDim($value)} dim 32
HUEDevice1: off
HUEDevice2: off

im Wohnzimmerdimmer (2.Zeile) wird also der String zusammengesetzt.
Ich vermute Zeile 390 >> $saved .= "$set " if( $set ne "state" );
und 402 >>$saved .= $value;
von 31_LightScene.pm als Ursache, allerdings übersteigen
vor allem Zeile 382 ff meine Kenntnisse :-)

Hab ich evtl. das Attribut lightSceneParamsToSave falsch gesetzt?
>>list FhemLichtWohnz liefert:
Internals:
   DEF        FFA16B82
   IODev      TCM310_0
   NAME       FhemLichtWohnz
   NR         57
   STATE      off
   TYPE       EnOcean
   Readings:
     2014-01-06 20:30:05   block           unlock
     2013-12-20 20:55:31   dimValue        0
     2014-01-06 20:26:57   dimValueStored  32
     2014-01-06 20:30:05   state           BI
Attributes:
   eventMap   BI:off B0:on
   gwCmd      dimming
   lightSceneParamsToSave state@{lcEnOceanDim($value)}
   manufID    00D
   model      other
   room       01_Wohnraum
   subType    gateway
   webCmd     on:off:dim 30:dim 40:dim 60:dim 80:dim 100:dim

Viele Grüße
Guiseppe

justme1968

ja. deswegen der vorschlag ein andere reading anstelle von state zu verwenden. vielleicht gibt es ein pct oder dim.

ja es muss natürlich "=~" heissen.

ja es liegt an zeile 390. wegen dem angehängten @{...} muss das set explizit vorgegeben werden.

definier bitte mal das attribut so:attr FhemLichtWohnz lightSceneParamsToSave state@{lcEnOceanDim($value)} -> statedann sollte es auch jetzt schon gehen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

guiseppe

Klasse!!!
Jetzt funktioniert es!
Ich bin begeistert von Fhem und dem Forum.

Vielen Dank und schönen Abend.

Grüße Guiseppe



HolyMoly

Hallo Andre,

hab bei mir immer dass problem dass die hue lampen nach physisch ein/aus (=Frau) weiß sind
und damit vollkommen die scene zerstören.
Kann man da irgendetwas tun um die hue/scene zu enforcen?
Also wenn die Lampe wieder online kommt, die Scene wiederherstellen?

Gruß Holy
FHEM auf Raspi2 & Radxa Rock

justme1968

wenn es dir darum geht automatisch zu schalten wenn eine birne wieder erreichbar ist kannst du das über ein notify an reachable lösen. um das aber wirklich vernünftig zu machen gibt es eine ganze reihe randbedingungen die mir noch einfallen und ich glaube das ist nicht generisch im modul möglich sondern nur sehr individuell.

ich könnte mir vorstellen das du z.b. eine szene aktivierst und alles ausschaltest sobald eine bulb wieder online ist. aber ich weiß nicht wie man das vom einschalten unterscheiden kann das absichtlich ist damit man licht hat und nicht im dunkeln steht.

gruss
  andre

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

HolyMoly

Hmm, ich habs jetzt mal so gemacht wie du vorgeschlagen hast

*Lampe.reachable:.true {
    fhem("set Beleuchtung scene ".Value("Beleuchtung"));
}

funktioniert und reicht fürs erste ;)
FHEM auf Raspi2 & Radxa Rock

cocktailyogi

Hallo,

danke für das komfortable Modul. Leider bekomme ich es nicht zum laufen.

System: aktuelles FHEM auf Ubuntu-Server

Sobald ich eine Scene aktivieren möchte, kommt folgende Fehlermeldung:
Die Aktionen werden auch nicht ausgeführt.
ZitatBogus entry
Status_Bad without TYPE Bogus entry
Status_Diele without TYPE Bogus entry
Status_Gaestezimmer without TYPE Bogus entry
Status_Kueche without TYPE Bogus entry
Status_Schlafzimmer without TYPE Bogus entry
Status_Wohnzimmer without TYPE Bogus entry
WW_Thermostat without TYPE

Modul-Internals und Definition:
ZitatDEF    

WW_Thermostat
Status_Bad
Status_Diele
Status_Kueche
Status_Schlafzimmer
Status_Wohnzimmer
Status_Gaestezimmer

HAS_DataDumper 1
HAS_JSON 1
NAME LS_HomeStatus
NR 160
NTFY_ORDER 50-LS_HomeStatus
STATE zuHauseOhneGaeste
TYPE LightScene

Irgendeine Idee?

Gruß,
Yogi

justme1968

mach mal bitte ein vollständiges list auf dein lightscene device.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

schreib mal bitte alle devices auf eine zeile

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

cocktailyogi

Zitat von: justme1968 am 21 Mai 2014, 13:48:25
schreib mal bitte alle devices auf eine zeile

gruss
  andre

Danke Andre,

das war die Lösung..... Ich hatte die Zeilen mit "\" getrennt, was sonst auch funktioniert, aber nun geht es. Danke!

Gruß,
Yogi

hanswetter

Hi zusammen,

hat jemand eine Idee, wie man den Status einer Scene abfragen kann (on oder off) bzw. weiß, ob es überhaupt die Möglichkeit hierzu besteht? Mit list bzw. xmllist bekomme ich leider nicht den Status der einzelnen Scenen.

Viele Grüße
Hans

justme1968

was meinst du mit status einer szene ?

wenn du den zuletzt geschaltete zustand meinst steht der im infernal STATE. also Value("<ls device>")oderlist <ls device> STATEoder <INT key="STATE"> aus  xmllist.

lightscene verfolgt aber nicht den status der geschalteten devices. d.h. der status ist im prinzip temporär und ist nur für den zeitpunkt der aktivierung wirklich gültig. wenn nachträglich noch eins der beteiligten devices von hand geschaltet wird zeigt LightScene trotzdem den zuletzt geschalteten gesamt zustand an.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968