[gelöst] Es sagt "right bracket without left bracket" ich finde es mit notepad++

Begonnen von Master_Nick, 19 Juni 2020, 16:23:23

Vorheriges Thema - Nächstes Thema

Christoph Morrison

Zitat von: betateilchen am 19 Juni 2020, 17:57:02
Natürlich geht das in diesem Kontext.
Die Frage ist aber, ob man als User auch versteht, warum es "geht".

Spätestens wenn man irgendwann versucht, solche Konstrukte in reinem perl (außerhalb eines DOIF oder gar außerhalb von FHEM) zu verwenden, wird man scheitern.

Da hast du Recht. Das Problem des OP ist ja, dass er in keinem Kontext richtig programmiert. Von der Architekturentscheidung solch "fette" DOIFs zu produzieren, mal ganz abgesehen.

Daher noch mal mein Verweis auf meine Punkte + folgende Ergänzung an den OP:
Dein DOIF würde sich deutlich einfacher schreiben und später auch warten (geh immer davon aus, dass du in einer Woche nicht mehr weißt, was du dir dabei gedacht hast und dass dein zukünftiges Ich ein Irrer mit einer Kettensäge ist, der weiß wo du wohnst und keinen Selbsterhaltungstrieb hat), wenn du es in kleinere logische Einheiten (meint: einzelne Devices, die auch ein notify sein dürfen, wenn man kein "fettes" DOIF braucht) aufteilst. Dabei (und bei einer sinnvolleren Formatierung) wäre dir vermutlich auch aufgefallen, dass die Bedinungskette in deinem ersten DOELSEIF-Zweig einen (weiteren) logischen Fehler hat.

Damian

DOIF kennt zwei Modi: FHEM-Modus und Perl-Modus, die nicht miteinander kombinierbar sind - so steht es in der Commandref.

Du hast dich aufgrund deiner Definition für den FHEM-Modus entschieden, dabei ist dieser Konstrukt das Problem:
...
DOELSEIF
(
    [Fernbedienung_Schlafzimmer_Deckenlicht:up_click] eq "true"
)
{
    if ( ([Schlafzimmer_Deckenlicht:bri] + 10) >= 100 )
        ( set Schlafzimmer_Deckenlicht bri 100 )
    elsif
        ( set Schlafzimmer_Deckenlicht bri [Schlafzimmer_Deckenlicht:bri] + 10 )
}


Du kannst zwar Perl auch im FHEM-Modus benutzen, dann aber nur Perl und da ist, wie schon geschrieben, einiges im Argen.

DOIF-Perl-Modus ist dagegen eine eigene Welt, dort kommt aber z. B. kein DOELESE und auch kein DOELSEIF vor ;)



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Master_Nick

 :o Also ich weiß nicht, warum ich es mir künstlich so quer gelegt habe :-D

Die Lösung war ja eigentlich sehr simpel.... läuft nun wie es soll inklusive meiner Beschränkung der bri und ct Werte.
Was auch immer mich da geritten hatte... Ich danke euch :-D

([Fernbedienung_Schlafzimmer_Deckenlicht:toggle] eq "true" and [Schlafzimmer_Deckenlicht:available] eq "true" and [Schlafzimmer_Deckenlicht] eq "on")
(set Schlafzimmer_Deckenlicht off)

DOELSEIF ([Fernbedienung_Schlafzimmer_Deckenlicht:toggle] eq "true" and [Schlafzimmer_Deckenlicht:available] and [Schlafzimmer_Deckenlicht] eq "off")
(set Schlafzimmer_Deckenlicht on)

DOELSEIF ([Fernbedienung_Schlafzimmer_Deckenlicht:up_click] eq "true" and [Schlafzimmer_Deckenlicht:available] and [Schlafzimmer_Deckenlicht:bri] < 100)
(set Schlafzimmer_Deckenlicht bri {([Schlafzimmer_Deckenlicht:bri] + 10 )})

DOELSEIF ([Fernbedienung_Schlafzimmer_Deckenlicht:down_click] eq "true" and [Schlafzimmer_Deckenlicht:available] and [Schlafzimmer_Deckenlicht:bri] > 0)
(set Schlafzimmer_Deckenlicht bri {([Schlafzimmer_Deckenlicht:bri] - 10 )})


DOELSEIF ([Fernbedienung_Schlafzimmer_Deckenlicht:left_click] eq "true" and [Schlafzimmer_Deckenlicht:available] and [Schlafzimmer_Deckenlicht:ct] > 250)
(set Schlafzimmer_Deckenlicht ct {([Schlafzimmer_Deckenlicht:ct] - 100 )})

DOELSEIF ([Fernbedienung_Schlafzimmer_Deckenlicht:right_click] eq "true" and [Schlafzimmer_Deckenlicht:available] and [Schlafzimmer_Deckenlicht:ct] < 450)
(set Schlafzimmer_Deckenlicht ct {([Schlafzimmer_Deckenlicht:ct] + 100 )})
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Christoph Morrison

Zitat von: Master_Nick am 24 Juni 2020, 12:16:17

DOELSEIF ([Fernbedienung_Schlafzimmer_Deckenlicht:up_click] eq "true" and [Schlafzimmer_Deckenlicht:available] and [Schlafzimmer_Deckenlicht:bri] < 100)
(set Schlafzimmer_Deckenlicht bri {([Schlafzimmer_Deckenlicht:bri] + 10 )})

DOELSEIF ([Fernbedienung_Schlafzimmer_Deckenlicht:down_click] eq "true" and [Schlafzimmer_Deckenlicht:available] and [Schlafzimmer_Deckenlicht:bri] > 0)
(set Schlafzimmer_Deckenlicht bri {([Schlafzimmer_Deckenlicht:bri] - 10 )})


Ist es ok wenn Schlafzimmer_Deckenlicht:bri Werte wie 109 oder -9 annimmt?

Master_Nick

Nein wäre nicht sinnvoll, aber sofern man das Gerät nicht ohne die Fernbedienung nutzt ist dies nicht möglich.
Denn die Fernbedienung agiert von 0 bis 100 nicht darunter und nicht darüber.

Klar wenn man nun anders an die Steuerung ginge - dann wäre dies nicht abgefangen. In Fhem selber ist es als Range definiert und somit nicht machar ohne es manuell wirklich einzutippen :-)
So zumindest meine Auffassung.


Zitat von: Christoph Morrison am 24 Juni 2020, 16:44:43
Ist es ok wenn Schlafzimmer_Deckenlicht:bri Werte wie 109 oder -9 annimmt?
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Christoph Morrison

Zitat von: Master_Nick am 24 Juni 2020, 16:49:04
Nein wäre nicht sinnvoll, aber sofern man das Gerät nicht ohne die Fernbedienung nutzt ist dies nicht möglich.
Denn die Fernbedienung agiert von 0 bis 100 nicht darunter und nicht darüber.

Dein Code wird das aber genau so machen. Wenn du aus irgendeinem Grund bri auf über 90 oder unter 10 hast, wird ein zu hoher oder zu niedriger Wert gesetzt werden. Da war deine erste Idee schon deutlich besser.

Master_Nick

Nein das wird er nur tun können, wenn ein Eingriff stattgefunden hat fernab der Fernbedienung. Diese arbeitet (bei mir) nur in 10er Schritten. Sonst wäre noch eine Manipulation des Ausgangswerts möglich, wäre dieser kein 10er Schritt ist kann es auch passieren.

Da es aber genau nur Steuerung in 10er Schritten gibt - so habe ich es eingebunden, ist das vernachlässigbar.


Ich muss ja nichts abfangen was nicht vorkommt :-)
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)