wie funktioniert die interne Funktion "ReplaceEventMap"?

Begonnen von Tobias, 06 Mai 2013, 16:45:50

Vorheriges Thema - Nächstes Thema

Tobias

Hi,
Meine Bewässerrungssteuerung ist per 8fach Switch realisiert. Nun möchte ich aber für jeden der 8 Ports ein egenes Device definieren. Also habe ich Dummy´s angelegt.
define Bewaesserung_port1 dummy
attr Bewaesserung_port1 webCmd Anschalten:Ausschalten
attr Bewaesserung_port1 eventMap /on-for-timer 30:Anschalten/off:Ausschalten/

Jetzt habe ich ein Notify definiert welches triggergestützt das eigentliche Device schaltet:
define Macro NOTIFY Bewaesserung.* {
my $device="%NAME";
Log 1, "Log Bewässerungsnotify: %NAME : %EVENT";
}

Dummerweise wird aber als Event nicht "on-for-timer 30" sondern "Einschalten" übergeben. Also muss ich manuell die EventMap Funktion aufrufen. Wen ich das mache bekomme ich aber einen Fehler. Ideen warum?? Aus dem Code in fhem.pl werd ich nicht ganz schlau...

ReplaceEventMap("Bewaesserung_port1", "Einschalten", 0);
Can't use string ("Einschalten") as an ARRAY ref while "strict refs" in use at fhem.pl line 2760.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

broadway

Du schreibst oben "Anschalten" und unten "Einschalten".
Könnte das das Problem sein?
Linksys NSLU2 debian + CUL | FHT80B, FS20, Elro

Tobias

sorry, ist ein copy&paste Fehler. Aber die Fehlermeldung bleibt trotzdem identisch.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Tobias

eigentlich kann nur Rudi etwas dazu sagen, kann ihm aber keine PM senden...
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

rudolfkoenig

Die ReplaceEventMap Parameter sind je nach Richtung unterschiedlich:

- Hin: ReplaceEventMap($devName, $wert, 1) liefert z.Bsp. "An" zurueck falls $wert="on" ist. Wird verwendet, falls um aus dem Event den trigger fuer die notify zu bauen ( *grins* :)
- Zurueck: ReplaceEventMap($devName, $arrayp, 0) ersetzt in dem von $arrayp referenzierten Array ab den zweiten Index "An" durch on, und liefert diesen neuen Array (nicht pointer!) zurueck. Wird verwendet, um aus "set Lampe An" die Modulvertraegliche "set Lampe on" zu machen.

Ist nicht schoen, war aber nicht fuer Modulautoren oder Enduser gedacht. Begruendung: wenn man etwas umbenannt hat, dann sollte man auch nur mit diesem neuen Wert zu tun haben.

Aufruf fuer Dich:
my @a = (undef, "Einschalten");
@a = ReplaceEventMap("Bewaesserung_port1", \@a, 0);
$status = @a[1];

P.S.: Anfaengerfragen laese ich selten, die Frage ist eher was fuer die Developer oder Automatisiergs Gruppe, und weniger fuer Anfaenger, die werden damit nur verwirrt.

Tobias

Hallo Rudi,
das Umbenennen ist ja nur damit es im WebIf "schöner" aussieht für den "Klick"

Dein Statement funktioniert, nur beinhaltet die Variable $status bei einem "on-for-timer 30" nur "on-for-timer". Hast du da noch eine kurze Idee?
Bewaesserung.* {
my $device="%NAME";
my @@a = (undef, "%EVENT");
@@a = ReplaceEventMap("%NAME", \@@a, 0);
my $status = @@a[1];

Log 1, "Log Bewässerungsnotify: %NAME : %EVENT : $status";
}
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

rudolfkoenig

shift @a;
$status = join(" ", @a);

Btw. wenn man $NAME/$EVENT statt %NAME/%EVENT verwendet, dann kann man die doofen @@/%% weglassen.

Tobias

Danke!!! Das wars.

nebenbei wusste ich garnicht das %NAME und %EVENT deprecated sind ;)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter