[Gelöst] DOIF Zuweisung mit globaler Variablen

Begonnen von manne44, 23 August 2016, 19:53:01

Vorheriges Thema - Nächstes Thema

manne44

Hallo,
ich habe schon einige DOIFs definiert, keine Probleme bisher, aber nun will ich in einem Dummy eine Textzuweisung aus einer Variable machen und das klappt einfach nicht. Ich sehe das sicher nicht, weil meine Kenntnisse hier nicht besonders tief sind, obwohl ich die Commandreferenz zu DOIF durchgelesen habe, aber nichts derartiges gefunden habe, der Fehler muß wohl außerhalb von DOIF liegen, aber wo? Jemand der sich besser aukennt sieht meinen Fehler wahrscheinlich sofort.
Ein Dummy, der nur Text enthält, der in einem Popup ausgegeben werden soll:

define swKlingelText dummy

Das DOIF:

# Klingel Gartentor
define pin11 RPI_GPIO 17
attr pin11 direction input
#attr pin11 event-on-change-reading Pinlevel.*
attr pin11 interrupt both
attr pin11 room Garten

define swKlingelSymbol dummy
attr swKlingelSymbol room garten

define di_pin11 DOIF ([pin11:Pinlevel] eq "low") (set swKlingelSymbol on, set pushmsg msg 'fhem' 'Es hat geklingelt ...' '' 0 '',set swKlingelText $main::$XbellActive) DOELSE (set swKlingelSymbol off, set swKlingelText $main::$XbellDeactive")

Alles funktioniert, Symbol, Pushmessage, aber nicht die Textzuweisung. Warum?
Eine Zuweisung in myUtils
fhem("set swKlingelText $XbellDeactive");
funktioniert, die Variablen sind dort auch definiert.
Wer kann sofort sehen was falsch ist und mir helfen?
RPI4-Buster mit SSD, RPI-Zero mit Bookworm

KernSani

Ich würde mal versuchen die Perl-Ausdrücke in geschweifte Klammern zu packen...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

manne44

Meinst Du das so
define di_pin11 DOIF ([pin11:Pinlevel] eq "low") (set swKlingelSymbol on, set pushmsg msg 'fhem' 'Es hat geklingelt ...' '' 0 '', {set swKlingelText $main::$XbellActive}) DOELSE (set swKlingelSymbol off, {set swKlingelText $main::$XbellDeactive})

oder so
define di_pin11 DOIF ([pin11:Pinlevel] eq "low") (set swKlingelSymbol on, set pushmsg msg 'fhem' 'Es hat geklingelt ...' '' 0 '', set swKlingelText {$main::$XbellActive}) DOELSE (set swKlingelSymbol off, set swKlingelText {$main::$XbellDeactive})

Hat beides keine Wirkung, es werden immer die Bezeichner ins Dummy kopiert.
RPI4-Buster mit SSD, RPI-Zero mit Bookworm

KernSani

Die zweite Variante meinte ich... Hmmm und wenn du das komplette set in Perl machst: {fhem("set swKlingelText... }
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

manne44

Vielen Dank für Deine Hilfe, aber das habe ich auch versucht, hat ebenso nichts gebracht. Ich muß da mal warten bis einer der Gurus zufällig vorbei kommt und mir da den entscheidenden Tip gibt.
RPI4-Buster mit SSD, RPI-Zero mit Bookworm

manne44

Ich habe das jetzt so geändert, dass ich die Werte direkt ohne Variable eintrage:

define di_pin11 DOIF ([pin11:Pinlevel] eq "low") (set swKlingelSymbol on, set swKlingelText Aktives Symbol deaktivieren?, set pushmsg msg 'fhem' 'Es hat geklingelt ...' '' 0 '')

Das funktioniert einwandfrei und zuverlässig. Es soll einfach beim Klingeln ein Symbol blinken und dann beim Druck darauf sich ein Popup mit dem Text, der austauschbar ist, aufgeblättert werden. Nichts besonderes. Die Rücksetzung des Symbols und die Änderung des Textes erfolgt dann in einer HTML-Datei beim Druck auf den Button. Insofern habe ich eine Lösung meines "Problems" gefunden, aber trotzdem würde ich gern mal wissen warum die Änderung des Textes mittel Variablen so nicht funktioniert.

Ein anderes Thema ist solch ein vorgefertigter Button, der bei Betätigung ein Popup mit verschiedenen anwenderspezifischen Texten zeigt, die dann ausgewählt werden können. Mir ist nicht bekannt, ob es ein solches Widget für TabletUI gibt. Mit CSS ist das bestimmt einfach machbar, kann ich aber nicht und mache es daher in HTML, was ich als nicht sehr elegant empfinde. Wenn jemand solch einen Button hat, her damit.
RPI4-Buster mit SSD, RPI-Zero mit Bookworm