Ankündigung

Einklappen
Keine Ankündigung bisher.

EibPC Zeitschaltuhr Bug?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    EibPC Zeitschaltuhr Bug?

    Hi, nach etlichen Stunden läuft nun mein Programm, aber ich möchte euch kurz vorstellen, dass ihr einen Bug drin habt:

    Zeitschaltuhr soll nur aktiv sein wenn Schalter "Schwibbogen Aussen-5/1/0" den Wert EIN hat
    Zeitschaltuhr soll schalten sobald das Tag / Nacht Objekt auf Nacht steht (0)
    Zeitschaltuhr soll 19:00:05 abschalten (soll noch verändert werden können)

    - Funktioniert aber nicht richtig, da es nicht bezogen auf das Objekt "Schwibbogen Aussen-5/1/0" abschaltet (schaltet ein und aus um 19:00:05):
    [ CODE ]
    //Zeitschaltuhren
    //Weihnachten
    //Aussen Feld
    if "Schwibbogen Aussen-5/1/0" then{ \\
    write("Schwibbogen Aussen Zustand-5/1/2",EIN); \\
    if !"Tag / Nacht-0/0/1" then write ("Außen Südterasse-4/0/202",EIN) endif;\\
    } else write("Schwibbogen Aussen Zustand-5/1/2",AUS) endif

    if chtime(19,00,05) then write ("Außen Südterasse-4/0/202",AUS) endif;\\
    [/ CODE]
    - Funktioniert nicht (schaltet ein aber nicht aus):
    [ CODE ]
    if "Schwibbogen Aussen-5/1/0" then{ \\
    write("Schwibbogen Aussen Zustand-5/1/2",EIN); \\
    if !"Tag / Nacht-0/0/1" then write ("Außen Südterasse-4/0/202",EIN) endif;\\
    } else write("Schwibbogen Aussen Zustand-5/1/2",AUS) endif

    if chtime(19,00,05) then {\\
    if "Schwibbogen Aussen-5/1/0" then write ("Außen Südterasse-4/0/202",AUS) endif;\\
    }endif
    [/ CODE]

    - Funktioniert nicht (schaltet ein aber nicht aus):
    [ CODE ]
    if "Schwibbogen Aussen-5/1/0" then{ \\
    write("Schwibbogen Aussen Zustand-5/1/2",EIN); \\
    if !"Tag / Nacht-0/0/1" then write ("Außen Südterasse-4/0/202",EIN) endif;\\
    if chtime(19,00,05) then write ("Außen Südterasse-4/0/202",AUS) endif;\\
    } else write("Schwibbogen Aussen Zustand-5/1/2",AUS) endif
    [/ CODE]

    Ich habe es jetzt so gelöst:
    [ CODE ]
    //Aussen Schwibbogen

    //Variablen
    SchwibbogenAussenProgramm="Schwibbogen Aussen Zustand-5/1/2";
    SchwibbogenWohnzimmerProgramm="Schwibbogen Wohnzimmer Zustand-5/1/3";
    TagNacht="Tag / Nacht-0/0/1";

    //Taster um das Program einzuschalten
    if "Schwibbogen Aussen-5/1/0" then{
    write("Schwibbogen Aussen Zustand-5/1/2",EIN)
    } else write("Schwibbogen Aussen Zustand-5/1/2",AUS) endif

    //Einschalten
    if SchwibbogenAussenProgramm and !TagNacht then write("Außen Südterasse-4/0/202",EIN) endif
    //Ausschalten
    if chtime(22,30,00) and SchwibbogenAussenProgramm then write("Außen Südterasse-4/0/202",AUS) endif
    [/ CODE]

    Aber ganz ehrlich sauberes Programmieren ist damit nicht möglich.
    Zuletzt geändert von Krenk; 26.11.2017, 21:16.

    #2
    Überarbeite Dein Posting doch mal mit [ CODE ] ... [/ CODE] damit es lesbar wird...

    Kommentar


      #3
      Zitat von Krenk Beitrag anzeigen
      - Funktioniert nicht (schaltet ein aber nicht aus):
      Code:
      if "Schwibbogen Aussen-5/1/0" then{ \\
      write("Schwibbogen Aussen Zustand-5/1/2",EIN); \\
      if !"Tag / Nacht-0/0/1" then write ("Außen Südterasse-4/0/202",EIN) endif;\\
      if chtime(19,00,05) then write ("Außen Südterasse-4/0/202",AUS) endif;\\
      } else write("Schwibbogen Aussen Zustand-5/1/2",AUS) endif
      hab jetzt nur mal diese Beispiel angeschaut. Das kann nciht so funktionieren, wie Du Dir es vermutlich vorstellst. Stichwort Validierung.
      Und im Handbuch steht glaub ich auhc ne Warnung vor verschachtelten IF-Abfragen, weil die meist nicht das machen, was man auf den ersten Blick erwarten könnte.

      Code:
      if "Schwibbogen Aussen-5/1/0" then
      Wird genau dann einmalig ausgeführt, wenn die GA von AUS auf EIN wechselt. Dann wird auf 5/1/2 geschrieben, Ein EIN auf 4/0/202 nur wenn grad nicht Tag und das AUS auf die gleiche GA nur wenn jetzt grad in dem Durchlauf es nach 19:00:05 ist. Das würde ein EIN mit direktem AUS bedeuten.

      Im nächsten Durchlauf ist schon bei
      Code:
      if "Schwibbogen Aussen-5/1/0" then
      Schluss, da die Validierung sagt, "keine Änderung" und damit wird der ganze Rest des Codes nie mehr abgearbeitet.
      ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

      Kommentar


        #4
        Hi, danke, macht zwar nur bedingt Sinn wie es im EibPC gehändelt wird, aber ohne verschachtelte Ifs scheint es zu laufen. Wäre ein große Verbesserung wenn die Validierung anders (= dem Ablauf normalen Codes andere Programmiersprachen oder Scripte) arbeiten würde.

        Kommentar


          #5
          Das hat schon seinen Sinn! Denk nicht in „normalen Programmiersprachen“, sieht zwar auf den ersten Blick so aus, läuft aber völlig anders. Es wird vereinfacht immer nur auf Veränderungen reagiert.
          Zuletzt geändert von Uwe!; 29.11.2017, 09:45.
          ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

          Kommentar

          Lädt...
          X