HM-PB-6-WM55 <-FHEM-> HM-LC-Sw4-DR: "Echte" Rückmeldung an Taster?

Begonnen von M_I_B, 21 November 2015, 22:59:44

Vorheriges Thema - Nächstes Thema

dev0

Andre war schneller, egal...

Variablen müssen deklariert werden. Speichern und lesen kannst Du sie in readings mit setreading/ReadingsVal.
z.B.

define foo notify ... {
  my $bla = ReadingsVal('device','reading','default');
  if ($bla eq 'blabla') {
    fhem('setreading device reading foobar')
  }
}

M_I_B

... vielen Dank, das Ihr so schnell reagiert habt!

das mit dem "setreading/ReadingsVal" habe ich noch nicht verstanden. Da versuche ich mich mal heute Abend einzulesen.

Ganz unabhängig davon wäre aber wohl eine "Funktion" (?) in der myUtil sinnvoller, da man die dann für jedes TimerDingsBumsKonstrukt verwenden kann, welche das Gleiche machen sollen, oder? Da könnte ich dann ja auch Zeitwerte in einem Array hinterlegen und bei Bedarf immer einen Wert weter springen, so das ich die nicht ggf. praxisfremd berechnen müsste (Zeit * Zähler dauert zu lange, Zeit ** Zähler schießt schnell übers Ziel).
Wenn ich das so annährend richtig sehe, scheint mir die Unterbringung in der myUtil allgemein nur Vorteile zu haben. Hat (für mich) lediglich den Nachteil, das ich erneut keinen Plan habe, wie so eine Funktion zu bauen ist und ich schon wieder noch tiefer in das System tauchen und was ganz neues lernen muss^^ (... oder, was natürlich auch eine Sichtweise ist ... Ich habe einfach zu hohe Ansprüche an den gewünschten Funktionsumfang  ::) )

frank

Zitat... Ich habe einfach zu hohe Ansprüche an den gewünschten Funktionsumfang
oder du willst keine erfolgerlebnisse.  ;)

wenn es im notify schon nicht geht, wird es auch nicht besser beim auslagern.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

justme1968

wenn es im notify schon nicht geht, wird es auch nicht besser beim auslagern.

das kommt drauf an... wenn man mit variablen arbeiten möchte um sich den zustand zu merken geht es nur ausgelagert gut.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

frank

Zitatwenn man mit variablen arbeiten möchte um sich den zustand zu merken geht es nur ausgelagert gut.
zustände in readings speichern funktioniert auch im notify.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

justme1968

ja. natürlich.

aber unabhängig vom speichern ist es ab einer gewissen code länge übersichtlicher das nicht mehr direkt ins notify zu packen. und wiederverwendbar ist es da auch nicht.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

M_I_B

... na Leute, Ihr seid ja witzig  ::)
Natürlich finde ich Erfolgserlebnisse nett. Aber im Moment verzichte ich bewusst darauf. Denn mit den Dingen die ich wirklich drauf habe, könnte ich mir täglich massenhaft Erfolgserlebnisse verschaffen, so das meine Frau mir das Grinsen am Abend aus dem Gesicht schlagen müsste ;D

Aber im Ernst: Es ist doch verständlich, das ich erst einmal versuche, selber einen einfachen Weg zu finden, der funktioniert; ob nun schön oder nicht ist erst einmal Nebensache. Mit Fortschreiten des Lernens wird i.d.R. auch der Code besser, die Rückfragen zu (aus EUrer Sicht) simplen Fehlern/Tatsachen und das allgemeine Verständnis. Letztlich ist mein Wunsch ja auch keine schwere Aufgabe (aus Eurer Sicht natürlich). der Haken daran ist nur, das ich derzeit zu vermeiden suche, zu tief und zu gefächert ins System einzusteigen. Ich habe einfach Angst, den Überblick und in der Folge die Motivation zu verlieren. Es ist schon deprimierend genug, wenn ein an sich gut ausschauender Code auf Grund der Besonderheiten in FHEM / perl einfach nicht funktioniert und wen man ab- und an auf Nachfragen einfach nur einen Link vor die Nase bekommt, der einem nicht weiter hilft.


Aber das nur am Rande ...

justme1968

nicht entmutigen lassen :)

der code würde auch ausserhalb von fhem nicht laufen. du kannst nicht im scope des if eine variable deklarieren und dann im else scope drauf zugreifen. das hat nichts mit fhem zu tun.

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

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

M_I_B

Zitatnicht entmutigen lassen :)
... ich bemühe mich ...
Das mit den Variablen habe ich nun verstanden; Basic- Nachwirkungen. Da geit dat nämlich ...

Aber mal eine vielleicht blöde Frage:
Kann ich die beiden Variablen nicht stumpf in der myUtil als global (how?) definieren, so das ich sie in meinem ELSIF- Kontrukt verwenden kann?

Ich denke, ich mache heute mal was ganz anderes, um den Kopf frei zu bekommen: Bakterien aus den Motorrädern müssen noch in'n Keller, dem V8 sollte ich mal die Winterschluffen aufstecken, die letzten 15 von 107 Fichtenwurzeln müssen noch aus'm Boden, Wohzimmer Fußleisten und CAT7, ... Arbeit ist genug und die Ecken, in denen ich mich bei einem Arbeitsanfall verstecken könnte, sind schon alle besetzt  8)

dev0

Zitat von: M_I_B am 27 November 2015, 13:14:02
Kann ich die beiden Variablen nicht stumpf in der myUtil als global (how?) definieren
Du wolltest Dich doch nicht verzetteln ;) Benutze die Variante von oben, wie alle anderen auch.
Und obendrauf kriegste noch einen Link, diesmal zur: 99_myUtils.pm

M_I_B

ZitatDu wolltest Dich doch nicht verzetteln ;)
Ja menno, hassa recht ;)

Also... Um überhaupt erst mal rein zu kommen habe ich das Beispiel in der genannten Doku entsprechend umgebaut, wobei folgendes heraus gekommen ist:

# define di_1 notify EG_FL_6CH_CH1 { SetTimerOnTip("$EVENT","$NAME") } #
my $timer = 3;
my $multi = 0;

sub SetTimerOnTip($$) {
my ($EVENT, $NAME) = @_;
if ($EVENT =~ /\Long.*/m && $multi == 0 ) {
$multi = 1;
fhem ( "set $NAME on" );
} elsif ( $EVENT =~ /\Long.*/m && $multi != 0 ) {
$multi = 0;
fhem ( "set $NAME off" );
} elsif ( $EVENT =~ /\Short.*/m && $multi != 0) {
$multi ++;
fhem ( "set $NAME on" ); #retrigger timer
fhem ( "set $NAME on-for-timer". $timer ** $multi );
}
}


Wie es aus FHEM aufgerufen wird, steht als Kommentar drüber. Nixxe passieren :-\

Um überhaupt mal festzustellen, ob da überhaupt was geht, habe ich den Code auf folgendes reduziert:

sub SetTimerOnTip($$) {
my ($EVENT, $NAME) = @_;
fhem ( "set $NAME on" );
}


Och nix... Natürlich ist die Datei wie beschrieben als 99_myUtils.pm abgespeichert und physikalisch da (ich arbeite lieber mit np++ und reloade lieber).
Ich habe die Doku nun schon ungezählte male durchgelesen, aber einen Fehler konnte ich nicht finden. In $NAME sollte "EG_FL_6CH_CH1" stehen und in $EVENT halt entsprechend "Short", "Long.*" oder "LongRelease.*"... ist doch so, wa?

(is zwar noch früh, aber ich genemige meinem Frust jetzt mal'n Irischen Single Malt; noch wer?!)

stromer-12

Zuviel reduziert, deine Parameter werden nicht übernommen.

Du kannst doch Log Meldungen einbauen um zu sehen was passiert.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

M_I_B

ZitatZuviel reduziert, deine Parameter werden nicht übernommen.
... verstehe ich leider nicht ... Was meinst Du damit? Das ist doch fast identisch mit dem HowTo und zumindest, der "Einzeiler" sollte funktionieren... Ach ne... Übergabe vergessen... Schön das wir drüber gesprochen haben ;)

Ok, noch mal... (time goes by ...)

Nene, alles korrekt. Hatte ich nur vergessen beim Copy&Past hierher; ich hab's oben korrigiert, so wie's wirklich ist.


Ach, vergesst es; ich bin so blöd, das mich die Schweine beissen  >:( >:( >:( Das kann gar nicht funktionieren, da in $NAME ja das auslösende Gerät steht und nicht das Ziel...

M_I_B

... ok, ich gebe erst mal auf; kostet zu viel Zeit und ab 50 läuft die rückwärts  :'(

Erstes Problem:
In perl (myUtils) kann ich problemlos "Short" und "Long.*" erfassen, nicht aber "LongRelease.*". Warum nicht ist mir ein Rätsel. Und weil ich das nicht hingekommen habe, habe ich nach einem anderen Weg gesucht und stoße dann auf das ...

Zweite Problem:
ReadingsVal/setreading ist wohl das was ich benötige, um den aktuellen Zustand des Aktors zu erfragen, oder täusche ich mich da? Wenn ich damit richtig liege, benötige ich genau das, um ein halbwegs funktionelles Script zu bosseln. Nur leider verstehe ich diese Nummer irgendwie überhaupt nicht, weder wie es auf FHEM und/oder perl- Ebene eingesetzt wird, noch wie ich aus perl heraus (in myUtils) an den aktuellen Aktorzustand heran komme...; ich mag jetzt nicht mehr so wirklich...

Ich mache jetzt ein paar große Schritte zurück und nutze wieder das ursprüngliche Konstrukt mit Vorgabe einer festen Zeit... Dann ist das halt so...

stromer-12

FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL