> Im Moment kämpfe ich noch damit, dass keine FS20-Geräte erkannt werden
> (trotz autocreate nix zu sehen), hoffe das wird noch.
Bei den Aktoren wirst Du dich mit autocreate auch schwer tun, die senden
ja nicht. Die darfst Du manuell anlernen. Also in Anlernmodus bringen
und dann einen "set" Befehl absetzen.
-Manfred
Ich wuerde es mit gut gewaehlten Namen loesen: wenn gilt dass xxxTaster immer
xxxLicht schaltet, dann wuerde folgendes notify funktionieren:
define Taster2Licht notify .*Taster {\
my $aktor = "@";;\
$aktor =~ s/Taster/Licht/;;\
fhem("set $aktor %");;\
}
Eine Alternative ist die Taster direkt an den Aktoren anzulernen, fhem kann
diese auch schalten und kriegt auch den Status mit.
Wenn es unbedingt ein Array sein soll, dann kann man das in 99_MyUtils.pm
einbauen (fuer Fortgeschrittene :)
Gar nicht. Das Web-Frontend muesste die Daten selber abholen, z.Bsp mit einem
JavaScript Prograemmchen. Ich selber will aber kein regelmaessiges Refresh,
fuer eine am Wand haengende Anzeige waere das aber wichtig.
> Grosses Problem:
> Das Mitschalten von STATE beim toggeln funktioniert nur genau einmal,
> da �ber setstate zwar $value, aber nicht $oldvalue angepasst wird.
Ist wohl ein Bug, habs (hoffentlich) gefixed und ins CVS eingecheckt.
Kannst Du es bitte testen?
Stimmt. Jetzt muesste es tun, habs mit deinem notify geprueft.
Nicht erschrecken: Nachher $value ist zwar falsch, aber das relevante
$defs{ezLichtRegal}{STATE} ist korrekt. Ursache: $value wird nur einmal vor
einem Perl-Notify Aufruf mit den Werten aller $defs{NAME}{STATE} gefuelt.
Da mich das fuellen aller Gerete ins $value vor jedem Perl-Notify bzw. Perl-At
stoert, moechte ich auf Funktionen als Schnittstelle umsteigen, analog zu
ReadingsVal():
$value{NAME} => Value("NAME")
$oldvalue{NAME}{VAL} => OldValue("NAME")
$oldvalue{NAME}{TIM} => OldTimestamp("NAME")
Diese Funktionen sind frisch im CVS, und $value wird in dem naechsten
fhem-Release verschwinden. Es sei denn ich werde ueberstimmt.
Du hast ein $ vergessen.
Grüße
Boris
Hatte nicht vor.
> Wie waere es, diese Routine in den 'define'-Befehl einzubauen, zB
> aktiviert durch ein Attribut (attr <device> toggleconversion 1) , dann
> koennte man jeglichen Taster so auffangen.
Ich nehme sinnvolle Patches gerne entgegen. Btw nicht define sondern
FS20_Parse.
stellst Du das auch ins Wiki? W�re prima! ...
Gru�
marte
Am 06.06.2011 22:32, schrieb UliM:
> Hallo,
> nach Rudis tatkraeftiger unterstuetzung und viel Basteln darf ich nun
> also meine allererste Perl-Routine vorstellen: Untoggle("<device>")
>
> Effekt:
> Wird ein device durch einen Taster bedient, wird das gesendete
> 'toggle' umgesetzt in 'on' bzw. 'off' , so dass auf dem Webfrontend
> nicht 'toggle', sondern die gewohnte Gl�hbirne erscheint.
>
> Implementierung:
> Den folgenden code im Verzeichnis /opt/fhem/share/FHEM in die Datei
> 99_myUtils.pm kopieren.
> (Falls es diese Datei noch nicht gibt: /opt/fhem/share/FHEM/
> 99_Utils.pm kopieren, Kopie in 99_myUtils.pm umbenennen und aus dieser
> Kopie alle vorhandenen Routinen l�schen - aber die Definitionen vor
> dem ersten "sub" und die "1;" am Ende stehen lassen).
>
> sub
> Untoggle($)
> {
> my ($obj) = @_;
>
> if (Value($obj) eq "toggle"){
> if (OldValue($obj) eq "off") {
> {Log 1, "Untoggle ".$obj." toggle -> on"}
> {fhem ("setstate ".$obj." on")}
> }
> else {
> {fhem ("setstate ".$obj." off")}
> {Log 1, "Untoggle ".$obj." toggle -> off"}
> }
> }
> else {
> {fhem "setstate ".$obj." ".Value($obj)}
> }
> }
>
>
> Einbindung in fhem.cfg :
> define<name> notify<Sensor> {Untoggle("<Sensor>")}
> Es muesste auch gehen:
> define<name> notify<Sensor> {Untoggle("<Aktor>")} #nicht getestet
>
> Beispiel aus dem obigen Verlauf dieses Posts:
> define ezLichtRegalSwitch notify ezLichtRegal
> {Untoggle("ezLichtRegal")}
>
> Hinweise:
> 1.<device> muss sich zuvor einmal im state 'on' oder 'off' befunden
> haben - z.B. nach fhem-Neustart das erste mal mit on oder off im
> webfrontend schalten, dann mit dem Taster los-toggeln.
> 2. Die �nderung des Status nach toggle wird auf dem Webfrontend erst
> nach einem manuellen refresh sichtbar, also zB noch einmal links den
> Raum anklicken oder im Browser F5 dr�cken.
Oder
fhem> reload 99_myUtils
2011-10-18_22:58:25 wz_LampeSchrank toggle 2011-10-18_22:58:32 wz_LampeSchrank toggle 2011-10-18_23:03:16 wz_LampeSchrank toggle 2011-10-18_23:03:20 wz_LampeSchrank toggle
...
Kann man der untoggle Routine noch beibringen
... wz_LampeSchrank on... wz_LampeSchrank off