Ankündigung

Einklappen
Keine Ankündigung bisher.

Anwesenheitssimulation

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

    #31
    Das wäre doch langweilig
    Tessi

    Kommentar


      #32
      Zitat von Jambala Beitrag anzeigen
      Hallo Michael,
      Wenn Du den Ansatz sinnvoll findest, kann ich Dir gerne meinen Code als Idee zur Verfügung stellen.
      Na dann lass uns doch mal an Deinem Code teilhaben. Interessant klingt es, man könnte es ja auch als Ergänzung sehen.
      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
      Enertex Produkte kaufen

      Kommentar


        #33
        Sowass gibt als Modul von Loxone: http://wp10454668.wp216.webpack.host...simulation.pdf

        Wäre interessant wie das dort realisiert ist.

        Frank
        Warum eine SPS wenns auch KNX gibt (oder war das umgekehrt???)

        Kommentar


          #34
          Hallo Zusammen,

          anbei meine Anwesenheitssimulation.

          Diese wird über den Taster "Abwesenheit Ein/Aus-5/0/0" aktiviert.

          Da es uns häufiger passiert ist, dass wir die Simulation versehentlich nicht abgeschaltet haben nachdem wir wieder zu Hause waren, habe ich Variablen eingebaut, die eine manuelles Einschalten einer Leuchte von einer durch die Simulation eingeschaltete Leuchte unterscheidet.

          So kann es nicht mehr passieren, dass man z.B. im Bad ist und die Simulation auf einmal das Licht ausschaltet.

          Wichtig war mir auch, dass ich die Simulation jederzeit einschalten kann.

          Den Code kann man sicherlich noch vereinfachen, aber ich habe damals sehr viel herumprobiert, bis die Simulation stabil lief ohne die manuelle Nutzung zu beeinflußen.

          Viele Grüße

          Michael

          [highlight=epc]
          //
          // -----------------------------------------------------------------------------------------------------------
          // Anwesenheitssimulation (AWS)
          // -----------------------------------------------------------------------------------------------------------
          //
          // -----------------------------------------------------------------------------------------------------------
          // AWS: Stehlampe im Esszimmer ein- und ausschalten
          // -----------------------------------------------------------------------------------------------------------
          //
          Zufallminute_Esszimmer=convert(random(30u32),0u08)
          Zufallsekunde_Esszimmer=convert(random(60u32),0u08 )
          if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
          and sun()==AUS then \\
          write("Eßzimmer Stehleuchte-2/1/14",EIN) \\
          endif
          if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
          and "Eßzimmer Stehleuchte-2/1/14"==EIN and htime(22,Zufallminute_Esszimmer,Zufallsekunde_Essz immer) then \\
          write("Eßzimmer Stehleuchte-2/1/14",AUS) \\
          endif

          //
          // -----------------------------------------------------------------------------------------------------------
          // AWS: Rolladen im Eß- und Wohnzimmer nach Sonnenuntergang/-aufgang runter-/hochfahren
          // -----------------------------------------------------------------------------------------------------------
          //
          Zufallminute_Rolladen=convert(random(30u32),0u08)
          Zufallsekunde_Rolladen=convert(random(60u32),0u08)
          if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
          and elevation()<=-5f32 then \\
          write("Eßzimmer R Auf/Ab-3/1/12",EIN); \\
          write("Eßzimmer H Auf/Ab-3/1/15",EIN); \\
          write("Wohnzimmer Auf/Ab-3/1/18",EIN) \\
          endif
          if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
          and htime(08,Zufallminute_Rolladen,Zufallsekunde_Rolla den) then \\
          write("Eßzimmer R Auf/Ab-3/1/12",AUS); \\
          write("Eßzimmer H Auf/Ab-3/1/15",AUS); \\
          write("Wohnzimmer Auf/Ab-3/1/18",AUS) \\
          endif

          //
          // -----------------------------------------------------------------------------------------------------------
          // AWS: Zufälliges Ein- und Ausschalten der Deckenspots in der Küche
          // -----------------------------------------------------------------------------------------------------------
          //
          // Definition der Parameter
          Schaltvorgang_Kueche=AUS
          Anwesenheitssimulation=AUS
          Zufallminute_Kueche=convert(random(55u32),0u08)
          Zufallsekunde_Kueche=convert(random(55u32),0u08)
          Leuchtdauer_Kueche=convert(60u32+random(240u32),0u 64)
          // Freigabe-Bedingungen für die Anwesenheitssimulation
          if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
          and sun()==AUS \\
          and chtime(12,00,00) \\
          and !chtime(22,30,00) then \\
          Anwesenheitssimulation=EIN \\
          else \\
          Anwesenheitssimulation=AUS \\
          endif
          // Zufallsgeneratoren stündlich aktualisieren
          if Anwesenheitssimulation==EIN \\
          and mtime(00,00) then \\
          Zufallminute_Kueche=convert(random(55u32),0u08); \\
          Zufallsekunde_Kueche=convert(random(55u32),0u08); \\
          Leuchtdauer_Kueche=convert(60u32+random(240u32),0u 64)*1000u64 \\
          endif
          // Deckenspots stündlich zufällig einschalten
          if Anwesenheitssimulation==EIN \\
          and mtime(Zufallminute_Kueche,Zufallsekunde_Kueche) then \\
          write("Küche Deckenspots-2/1/9",EIN); \\
          Schaltvorgang_Kueche=EIN \\
          endif
          // Deckenspots stündlich zufällig ausschalten
          if Schaltvorgang_Kueche==EIN \\
          and after("Küche Deckenspots-2/1/9"==EIN,Leuchtdauer_Kueche) then \\
          write("Küche Deckenspots-2/1/9",AUS); \\
          Schaltvorgang_Kueche=AUS \\
          endif

          //
          // -----------------------------------------------------------------------------------------------------------
          // AWS: Kind geht schlafen
          // -----------------------------------------------------------------------------------------------------------
          //
          Schaltvorgang_Kinderzimmer=AUS
          Zufallminute_Kinderzimmer=convert(random(10u32),0u 08)
          Zufallsekunde_Kinderzimmer=convert(random(60u32),0 u08)
          Verzoegerung_Kinderzimmer=convert(60u32+random(60u 32),0u64)*1000u64
          if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
          and htime(20,Zufallminute_Kinderzimmer,Zufallsekunde_K inderzimmer) then \\
          write("Kinderzimmer R Wandleuchte-2/2/3",EIN); \\
          Schaltvorgang_Kinderzimmer=EIN \\
          endif
          if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
          and Schaltvorgang_Kinderzimmer==EIN \\
          and (after("Kinderzimmer R Wandleuchte-2/2/3"==EIN,Verzoegerung_Kinderzimmer)) then \\
          write("Kinderzimmer R/R Auf/Ab-3/2/12",EIN); \\
          write("Kinderzimmer R/V Auf/Ab-3/2/15",EIN) \\
          endif
          if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
          and Schaltvorgang_Kinderzimmer==EIN \\
          and (after("Kinderzimmer R/R Auf/Ab-3/2/12"==EIN,Verzoegerung_Kinderzimmer)) then \\
          write("Kinderzimmer R Wandleuchte-2/2/3",AUS); \\
          Schaltvorgang_Kinderzimmer=AUS \\
          endif

          //
          // -----------------------------------------------------------------------------------------------------------
          // AWS: Eltern gehen Schlafen
          // -----------------------------------------------------------------------------------------------------------
          //
          Schaltvorgang_Diele=AUS
          Schaltvorgang_Badezimmer=AUS
          Zufallminute_Diele=convert(random(60u32),0u08)
          Zufallsekunde_Diele=convert(random(60u32),0u08)
          Verzoegerung_Diele=convert(60u32+random(60u32),0u6 4)*1000u64
          Zufallminute_Schlafzimmer=convert(random(60u32),0u 08)
          Zufallsekunde_Schlafzimmer=convert(random(60u32),0 u08)
          if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
          and htime(22,Zufallminute_Diele,Zufallsekunde_Diele) then \\
          write ("Diele Wandspots-2/2/1",EIN); \\
          Schaltvorgang_Diele=EIN \\
          endif
          if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
          and Schaltvorgang_Diele==EIN \\
          and (after("Diele Wandspots-2/2/1"==EIN,Verzoegerung_Diele)) then \\
          write("Schlafzimmer R Auf/Ab-3/2/30",EIN); \\
          write("Schlafzimmer M Auf/Ab-3/2/27",EIN); \\
          write("Schlafzimmer L Auf/Ab-3/2/24",EIN); \\
          write("Diele Wandspots-2/2/1",AUS); \\
          write("Badezimmer Deckenspots-2/2/4",EIN); \\
          Schaltvorgang_Badezimmer=EIN; \\
          endif
          if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
          and Schaltvorgang_Diele==EIN \\
          and (after("Diele Wandspots-2/2/1"==AUS,Verzoegerung_Diele)) then \\
          write("Badezimmer Auf/Ab-3/2/18",EIN); \\
          write("Badezimmer Deckenspots-2/2/4",AUS); \\
          Schaltvorgang_Diele=AUS \\
          endif
          if "Abwesenheit Ein/Aus-5/0/0"==EIN \\
          and htime(08,Zufallminute_Schlafzimmer,Zufallsekunde_S chlafzimmer) then \\
          write("Schlafzimmer R Auf/Ab-3/2/30",AUS); \\
          write("Schlafzimmer M Auf/Ab-3/2/27",AUS); \\
          write("Schlafzimmer L Auf/Ab-3/2/24",AUS); \\
          write("Badezimmer Auf/Ab-3/2/18",AUS); \\
          write("Kinderzimmer R/R Auf/Ab-3/2/12",AUS); \\
          write("Kinderzimmer R/V Auf/Ab-3/2/15",AUS) \\
          endif
          [/highlight]

          Kommentar


            #35
            Zitat von Jambala Beitrag anzeigen
            Hallo Zusammen,
            anbei meine Anwesenheitssimulation.
            Schöner Ansatz, ein Makro wäre natürlich schön...

            Ich hab meine Makros nun fertig und hab das so gemacht, dass man die Aufzeichnungsinterveralle auch relativ leicht im Makrocode ändern kann. Pro Intervall sind es eben 350 Telegramme.
            ich hab auch mal bei mir geschaut (5 Bewohner) was so Telegrammraten sind und das in das Standard-Makro übernommen. Dieses Makro belegt dann ca. 14% der verfügbaren Objekte.

            Wenn in der übernächsten Firmware größere FIFO-Speicher dazukommen, wird man da mit weniger Speicherauslastung zurechtkommen. Die Doku schreib ich noch und werde das auch mal hier vorstellen.

            Basis der Aufzeichnung sind die neuen Funktion readrawknx und afterc, die Daten werden in einem String gespeichert, der eben nur 350 Telegramme (max. 4 Bytes) ablegen kann.
            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
            Enertex Produkte kaufen

            Kommentar


              #36
              Ein komplettes KNX-Telegramm inklusive Zeitstempel in 4 Byte packen - wie geht das?
              Tessi

              Kommentar


                #37
                Zitat von Tessi Beitrag anzeigen
                Ein komplettes KNX-Telegramm inklusive Zeitstempel in 4 Byte packen - wie geht das?
                Nutzendaten => String_1
                Adresse => String_2
                Zeit => String_3
                Pro Telegramm 4 Byte je String.
                offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                Enertex Produkte kaufen

                Kommentar


                  #38
                  Da wir ja nun die Umsetzung kennen (ja, Volker, ein paar Sätze mehr wären manchmal nicht schlecht): Wie kann man die Telegramme bearbeiten, prüfen oder ändern? Hast du auch an das Non-Volatile Memory gedacht?

                  Ehrlich gesagt ist mir völlig unklar warum es ein Intervall gibt, worauf abgefragt wird. Wenn der Zeitstempel vorhanden ist, sollte der "Überlauf" in den nächsten String wohl kein Thema sein, auch wenn es keine (String-)Arrays gibt. Die Strings müssen ja so oder so angelegt werden.
                  BR
                  Marc

                  Kommentar

                  Lädt...
                  X