Logik-Operatoren in Scripten

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Antworten
mabel
Beiträge: 65
Registriert: 02.07.2015, 17:58
Hat sich bedankt: 2 Mal

Logik-Operatoren in Scripten

Beitrag von mabel » 04.06.2019, 20:38

Nach einigen Jahren mit Scripten stolpere ich über folgende Logigverknüpfungen :?

Code: Alles auswählen

WriteLine("Hallo Welt!");
boolean AA = false;
boolean BB = false;

if (!AA && !BB)
{WriteLine("1")}

if ((!AA) && (!BB))
{WriteLine("2")}

if (!(AA || BB))
{WriteLine("3")}
WriteLine("--ENDE--");
Eigentlich sollten die Ergebnisse bei allen IF-Abfragen immer die gleichen sein.
Solange "BB" = false ist, ist auch alles gut.
Wenn "BB" = true ist, ist die erste IF-Abfrage immer wahr, egal welchen Wert "AA" annimmt.
Wie ist die genaue Syntax beim Umgang mit Negationen ggf. bei IF / ELSEIF / WHILE-Abfragen?
Muss immer eine Klammer gesetzt werden, wie in der 2. Abfrage?

Benutzeravatar
Black
Beiträge: 5508
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 427 Mal
Danksagung erhalten: 1088 Mal
Kontaktdaten:

Re: Logik-Operatoren in Scripten

Beitrag von Black » 04.06.2019, 21:53

Code: Alles auswählen

WriteLine (4*6+2); 
das ist laut rega auch 32 ^^

naja, punkt und strichrechnung kann jede maschine... jede ? nein eine kleine weisse kiste aus ostfriesland ... ^^

scherz beiseite.

da musste aufpassen, die parser geht stur von rechts nach links

negation vor und vor oder kennt der nicht

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Matsch
Beiträge: 5503
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 118 Mal
Danksagung erhalten: 751 Mal

Re: Logik-Operatoren in Scripten

Beitrag von Matsch » 04.06.2019, 22:33

Das war mir auch komplett unverständlich, dass es ein Programm gibt, das die normalen Vorrangssregeln einfach nicht kennt.
So muß man halt mit Klammern verschwenderisch umgehen. Besonders über die Negation ! bin ich mehrmals gestolpert.

Allerdings weist eQ-3 in seinen Dokumenten zur Skriptprogrammierung darauf hin, dass es keine "normalen" Vorrangsregeln gibt, sondern stur von rechts nach links aufgelöst wird - immerhin :roll: .

mabel
Beiträge: 65
Registriert: 02.07.2015, 17:58
Hat sich bedankt: 2 Mal

Re: Logik-Operatoren in Scripten

Beitrag von mabel » 05.06.2019, 20:08

ja bei Punkt- und Strichrechnung war mir das klar.

Aber da ich in der Anleitung trotz mehrfachen Nachlesens bei logischen Verknüpfungen diesbezüglich keinen Hinweis gefunden habe, ging ich davon aus, dass hier erst negiert und dann verknüpft wird.
Falsche Annahme.

Also wird die erste Operation

Code: Alles auswählen

if (!AA && !BB)
{ … }
eigentlich wie folgt abgearbeitet:

Code: Alles auswählen

if (! (AA && !BB))
{ … }
grrrrrrr.

Matsch
Beiträge: 5503
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 118 Mal
Danksagung erhalten: 751 Mal

Re: Logik-Operatoren in Scripten

Beitrag von Matsch » 05.06.2019, 22:50

Stimmt!
Leider.

dtp
Beiträge: 10672
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 327 Mal
Danksagung erhalten: 503 Mal

Re: Logik-Operatoren in Scripten

Beitrag von dtp » 06.06.2019, 12:48

Was liefert denn

Code: Alles auswählen

if(!(AA) && !(BB))
Letztlich ist ja "AA" zu lesen, wie "AA == true" und "BB" wie "BB == true".
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

mabel
Beiträge: 65
Registriert: 02.07.2015, 17:58
Hat sich bedankt: 2 Mal

Re: Logik-Operatoren in Scripten

Beitrag von mabel » 07.06.2019, 07:50

selbes Ergebnis wie oben, nach der o.g. Abarbeitung ja auch logisch :lol: (schönes Wortspiel)
1. BB wird negiert
2. !BB wird mit AA verknüpft
3. Negation

Stur von rechts nach links!

Benutzeravatar
Black
Beiträge: 5508
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 427 Mal
Danksagung erhalten: 1088 Mal
Kontaktdaten:

Re: Logik-Operatoren in Scripten

Beitrag von Black » 07.06.2019, 08:00

Man muss sich halt merken, dass die rega das stur falsch macht..

also falsch im vergleich zu den üblichen anerkannten Lehrmitteln auf diesem Planeten.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Xel66
Beiträge: 14221
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 593 Mal
Danksagung erhalten: 1510 Mal

Re: Logik-Operatoren in Scripten

Beitrag von Xel66 » 07.06.2019, 18:14

Black hat geschrieben:
07.06.2019, 08:00
Man muss sich halt merken, dass die rega das stur falsch macht..
Sie ist halt konsequent. Bei mathematischen Operationen macht sie es ja genau so. Da muss man sich auch das Hirn verbiegen. Ich habe vor einiger Zeit versucht, den passenden Zeitpunkt zu einer bestimmten Sonnenelevation zu errechnen. Das kostet Zeit...

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Antworten

Zurück zu „HomeMatic allgemein“