Wecker

Schlagwörter: 

Ansicht von 25 Antwort-Themen
  • Autor
    Beiträge
    • #37037
      Oliver122
      Teilnehmer

        Hallo zusammen,

        ich möchte eine Wecker App machen, kann aber den Alarm nicht stoppen. Ich habe es folgendermaßen gemacht:

        on aktuallisieren
           set the twelvehourtime to false
           put the long time into fld "Uhr"
           set the itemDelimiter to ":"
           if item 1 of fld "Weckzeit" = item 1 of fld "Uhr" and item 2 of fld "Weckzeit" = item 2 of fld "Uhr" and the visible of fld "Weckzeit" = true then
              zeitprüfen
           end if
           send aktuallisieren to me in 1 seconds
        end aktuallisieren 
        on zeitprüfen
           set the itemDelimiter to ":"
           if item 1 of fld "Weckzeit" = item 1 of fld "Uhr" and item 2 of fld "Weckzeit" = item 2 of fld "Uhr" and the visible of fld "Weckzeit" = true then
              revSpeak "Der HERR ist mein Hirte, mir wird nichts mangeln." #Er weidet mich auf einer grünen Aue und führet mich zum frischen Wasser.Er erquicket meine Seele. Er führet mich auf rechter Straße um seines Namens willen."
           end if
           send aktuallisieren to me in 1 seconds
        end zeitprüfen

        Man hat die Möglichkeit über einen “Weiterschlafen” die Weckzeit 10 min. weiterzudrücken oder mit einenm anderen Knopf, den Wecker abzustellen, indem man fld Weckzeit deaktiviert.

        Das Problem ist folgendes:

        Drückt man eine der beiden Tasten, direkt nach dem der Wecker angefangen hat, liest er den Text noch dreimal. Drückt man nach ca. einer Minute, dauert es ewig.

        Ich habe es auch mit einer WAV Datei versucht und stop playing “Datei”. Das funktioniert aber auch nicht.

        Kann jemand helfen.

        Grüße Oliver

      • #37039
        Klaus Major
        Administrator

          Hi Oliver,

          benutzt Du einen Player oder -> play ac “Dein Sound.wav”
          ac = Abkürzung für audioclip

          Wenn Player:

          ...
          stop player "dein playername hier"
          ...

          Wenn importierter Audioclip, dann einfach nur:

          ...
          play stop
          ...

          Gruß

          Klaus

        • #37110
          Axwald
          Teilnehmer

            Whow!

            Mit diesem Thema hast Du mich daran erinnert, daß ich so etwas einmal angefangen habe. Allerdings bin ich über das grundlegende Interface nicht hinausgekommen 😉

            Dank Deinem Hinweis habe ich nun begonnen, ein Code-Gerüst zu erstellen. Und bin aus allen Wolken gefallen: Das ist ja viel aufwendiger, als ich mir das vorgestellt hatte!

            Meine Idee war:

            • Das Interface soll so einfach wie möglich sein, da das Ding auch aufm Tablet laufen soll. Also so wenig Controls wie möglich.
            • Da sowieso eine Zeitmessung drin ist, 3 Funktionen:
              – Wecken (“Wecker”, Eingabe: Uhrzeit, mit ‘Snooze’),
              – Countdown (“Eieruhr”, Eingabe: Minuten, mit Unterbrechen) und
              – Zeitnahme (“Stopuhr”, Eingabe: mit Unterbrechen);
              Die Art der Zeit-Eingabe bestimmt, welche Funktion läuft.
            • Eine Scrollbar, die den Fortschritt graphisch anzeigt.
            • Möglicherweise 2 oder mehr gestaffelte “Alarme” – erst leise, dann lauter?
            • Bedienung, wenn möglich, nur per Maus/ Touch.

            Was fehlt?

            Dafür brauche ich folgende variable Werte:

            1. Das Aktualisierungsintervall für den Timer;
            2. Eine max. “Läutdauer” – das Ding soll ja nicht Tage lang wecken …
            3. Die Zeit, wie lange “Snooze” wartet, bis es wieder los geht.
            4. Einen Wert, wie oft “Snooze” benutzt werden kann.
            5. Einen Wert, wann auf den nächsten Alarm gewechselt wird.
            6. Informationen, was bei den einzelnen Alarmen passieren soll.

            Puh, schon eine ganze Menge. Diese Informationen sollten veränderbar sein, aber, einmal eingestellt, erhalten bleiben. Also braucht es ein “Preferences”-System.

            Um das alles zu bedienen, braucht es min. 3 Karten:

            • Zentrale, wo die Alarme gestartet/ gestoppt werden & wo eine Zustands-Übersicht angezeigt wird.
            • Zeiteingabe.
            • 1 oder mehrere “Preferences”.

            Interessant. Schon beim Aufschreiben hier sind mir einige Sachen eingefallen, an die ich vorher gar nicht gedacht hatte 😉
            Habe ich noch etwas übersehen?

            Beide, sowohl mein Koch-Timer als auch mein Reisewecker, bereiten sich gerade auf den wohlverdienten Ruhestand vor und sehen nicht mehr sooo gesund aus. Ersatz muß her, aber ich bin da etwas eigen – was so auf dem Markt ist, taugt mir alles nicht richtig. Also selber bauen, fürs Tablet!

            Darum werde ich dieses Projekt fertigstellen, früher oder später.
            Sollte jemand daran interessiert sein, ich bin offen für Wünsche & Vorschläge (soweit sie Sinn machen & zu dem passen, was ich mir vorstelle).

            Ich schreibe das mit der 6.7.10/Win32 Community edition. Also GPL v3 & damit für jeden verwendbar, der das mit seinem Gewissen & den für ihn geltenden Lizenzbestimmungen vereinbaren kann.

            Bei Interesse werde (in Deutsch kommentierte) Versionen auf meinem Webspace zur Verfügung stellen. Da dabei einige Tricks aus meinen kommerziellen Projekten einfliessen werden, könnte das auch als Programmier-Beispiel interessant sein.

            Interesse? Melden! Viel Spaß!

          • #37152
            Oliver122
            Teilnehmer

              Hallo Klaus,

              es funktioniert irgendwie nicht. Ich benutze ein ac.
              Habe das mal zusammengeschrieben.

              on aktuallisieren
                 set the twelvehourtime to false
                 put the long time into fld "Uhr"
                 set the itemDelimiter to ":"
                 if item 1 of fld "Weckzeit" = item 1 of fld "Uhr" and item 2 of fld "Weckzeit" = item 2 of fld "Uhr" and the visible of fld "Weckzeit" = true then
                    play klangpfad&"alarm.wav"
                    send aktuallisieren2 to me in 1 seconds
                 end if
                 send aktuallisieren to me in 1 seconds
              end aktuallisieren
              
              on aktuallisieren2
                 if item 1 of fld "Weckzeit" <> item 1 of fld "Uhr" or item 2 of fld "Weckzeit" <> item 2 of fld "Uhr" or the visible of fld "Weckzeit" = false then
                    play stop
                    send aktuallisieren to me in 1 seconds
                 end if
                 if item 1 of fld "Weckzeit" = item 1 of fld "Uhr" and item 2 of fld "Weckzeit" = item 2 of fld "Uhr" and the visible of fld "Weckzeit" = true then
                    set the twelvehourtime to false
                    put the long time into fld "Uhr"
                    send aktuallisieren2 to me in 1 seconds
                 end if
              end aktuallisieren2

              Das Problem:

              Wenn die drei Bedingungen eintreten, sagt er ca. 5 die ersten zwei Worte des ac und hängt sich dann auf.
              Die Uhr läuft zwar weiter, aber ist nicht mehr bedienbar.
              Wenn man hingegen die Weckzeit um 13:59 und 58 sec. auf 13:59 einstellt, sagt er die ersten zwei Worte, bis 14:00, also wenn die Bedingung nicht mehr passt und fängt dann an, den Clip richtig abzuspielen und lässt sich dann auch nicht mehr stoppen.

              Grüße Oliver

            • #37269
              Klaus Major
              Administrator

                Hi Oliver,

                ich bin mir nicht sicher, denke aber, daß sich hier die Befehle sammeln** und irgendwann verscuht werden, von der Engine abgearbeitet zu werden.

                **Es werden jede Sekunde ZWEI Befehle geSENDet, das könnte das Problem sein.

                Ich denke, Du benötigst nur EINEN Handler wie hier, der sollte alles abdecken.
                Bitte die Kommentare lesen!

                on aktualisieren
                   set the twelvehourtime to false
                   put the long time into fld "Uhr"
                   set the itemDelimiter to ":"
                   
                   ## Weckzeit erreicht, nun den Sound abspielen
                   if item 1 of fld "Weckzeit" = item 1 of fld "Uhr" and item 2 of fld "Weckzeit" = item 2 of fld "Uhr" and the visible of fld "Weckzeit" = true then
                      
                      ## Zusammengesetzte Pfad- und Objektnamen immer in Klammern!
                      play (klangpfad & "alarm.wav")
                   else
                      
                      ## Sound anhalten, es gibt auch keine Fehlermeldung, wenn gerade kein Sound spielt!
                      play stop    
                      ## Was, wenn Dein Wecksound länger als eine Sekunde dauert?
                      ## dann wird er gnadenlos abgewürgt! Willst Du das?
                      ## Wenn nicht, einfach den ELSE Falls ganz weglassen  
                   end if
                   ## Zu SENDende Befehle immer in Anführungszeichen!
                   send "aktualisieren" to me in 1 seconds
                end aktuallisieren

                Gruß

                Klaus

              • #37351
                Oliver122
                Teilnehmer

                  Hi Klaus,

                  das hat mich weitergebracht und funktioniert mit einer kleinen Änderung unter Win 10 einwandfrei.
                  Das ganze soll aber unter Android laufen und ich habe jetzt erst gesehen, dass play stop nicht unter Android funktioniert.

                  Wie kann man das denn für Android machen? Ich habe bisher nichts passendes gefunden.

                  Gruß Oliver

                • #37354
                  Oliver122
                  Teilnehmer

                    Ich hatte s mit

                    mobileStopPlayingOnChannel (klangpfad & "alarm.wav")

                    versucht. Das wirft aber nur einen Fehler aus.

                  • #37355
                    Klaus Major
                    Administrator

                      Hi Oliver,

                      unter Android geht es auch mit PLAY aber mit dem Zusatz FILE:

                      ...
                      play file (klangpfad & "alarm.wav")
                      ...

                      Einen so gestarteten Sound anhalten:

                      ...
                      play EMPTY
                      ...

                      Gruß

                      Klaus

                    • #37356
                      Oliver122
                      Teilnehmer

                        Hi Klaus,

                        danke jetzt funktioniert es. Ist nur schwierig drauf zu kommen, wenn der Befehl nicht zu finden ist.

                        Gruß Oliver

                      • #37363
                        Klaus Major
                        Administrator

                          Naja, es gibt genau drei Einträge im Dictionary zu PLAY.
                          Und bei jedem steht das Betriebsystem dabei, auf dem der Befehle funktioniert.

                        • #37451
                          Oliver122
                          Teilnehmer

                            Hallo zusammen,

                            im Grunde funktioniert jetzt alles einwandfrei. Wenn der Bildschirm aber ausgeschaltet, wird klingelt er nicht. Muss man extra programmieren und wenn ja wie, dass der Wecker auch anspringt, wenn das Gerät auf Standby, bzw. Bildschirm aus ist?

                            LG.
                            Oliver

                          • #37456
                            Klaus Major
                            Administrator

                              Nur der Bildschirm ausgeschaltet oder das ganze Gerät?

                            • #37457
                              Oliver122
                              Teilnehmer

                                Hi Klaus,

                                nur der Bildschirm.

                                LG. Oliver

                              • #37458
                                Klaus Major
                                Administrator

                                  Hm, ixh dachte, dann sollte es funktionieren.
                                  Tut mir leid, ich muss die Frage weitergebe, so gut kenne
                                  ich mich noch nicht mit Handies aus.

                                  Hattest du eigentlich meine Mail bezüglich Deines “zaehler.livecode” erhalten?

                                • #37459
                                  Oliver122
                                  Teilnehmer

                                    Ja habe ich, wenn das die war , wo ich geschrieben habe, dass ich das Ding erstmal liegen lasse.

                                    Ich kümmere mich später um die App. Den Wecker hatte ich meiner Frau versprochen.

                                    Solange der Bildschirm an ist, funktioniert alles. Man kann, soviel ich gesehen habe, aber nur einstellen, das der Bildschirm nicht ausgeht, wenn das Gerät am Netz ist. Der Bildschirm kann ja ausgehen, aber klingeln sollte der Wecker schon.

                                    Danke Klaus.

                                    Kann jemand anders was hierzu sagen?

                                  • #37460
                                    Klaus Major
                                    Administrator

                                      Ja habe ich, wenn das die war , wo ich geschrieben habe, dass ich das Ding erstmal liegen lasse.

                                      Wahrscheinlich, aber eine kurze Empfangsbestätigung wäre schon ein feiner Zug…

                                    • #37461
                                      Torsten
                                      Teilnehmer

                                        Hi Oliver,

                                        “Aufwecken” kann man seine App mit mobileCreateLocalNotification.

                                        Verhindern, dass der Bildschirm ausgeht, geht mit “mobileLockIdleTimer”.

                                        Happy Skripting
                                        Torsten

                                      • #37462
                                        Oliver122
                                        Teilnehmer

                                          Hi zusammen,

                                          @ Klaus ja da hast du Recht. Sorry.

                                          @ Torsten danke probiere ich gleich mal.

                                        • #37463
                                          Oliver122
                                          Teilnehmer

                                            Hi Torsten,

                                            es ist dann eigentlich nur in dem handler sinnvoll:

                                            on aktuallisieren
                                               set the twelvehourtime to false
                                               put the long time into fld "Uhr"
                                               set the itemDelimiter to ":"
                                               if item 1 of fld "Weckzeit" = item 1 of fld "Uhr" and item 2 of fld "Weckzeit" = item 2 of fld "Uhr" and the visible of fld "Weckzeit" = true then
                                                  put random(8) into DieZahl
                                                  play (klangpfad & DieZahl & ".wav") looping
                                                  aktuallisieren2 
                                               else
                                                  play stop
                                                  # für Android
                                                  #play empty
                                                  send aktuallisieren to me in 1 seconds
                                               end if
                                            end aktuallisieren

                                            Ich vermute nach random. Aber wie muss es dann aussehen? Wenn die if Bedingung erfüllt ist, sucht sich das Programm einen ac aus 8 aus und spielt diesen. Wie muss es aussehen, das des auch bei ausgeschaltetem Bildschirm funktioniert?

                                            Ich habe mir das angesehen. mobileCreateLocalNotification angesehen, verstehe das aber gar nicht.

                                            Danke im Voraus.

                                          • #37464
                                            Oliver122
                                            Teilnehmer

                                              Ich habe es unter die if Bedingung geschrieben:

                                              mobileCreateLocalNotification the seconds + 10, true, "0"

                                              Fehler: can’t find handler. Aber er ist doch in einem.

                                            • #37493
                                              Oliver122
                                              Teilnehmer

                                                Hallo zusammen,

                                                aktuell sieht es bei mir so aus:

                                                on aktuallisieren
                                                   set the twelvehourtime to false
                                                   put the long time into fld "Uhr"
                                                   set the itemDelimiter to ":"
                                                   if item 1 of fld "Weckzeit" = item 1 of fld "Uhr" and item 2 of fld "Weckzeit" = item 2 of fld "Uhr" and item 3 of fld "Weckzeit" = item 3 of fld "Uhr" and the visible of fld "Weckzeit" = true then
                                                      put random(8) into DieZahl
                                                      put fld "Weckzeit" into sendezeit
                                                      if the environment is "mobile"  then
                                                         #mobileCancelAllLocalNotifications
                                                         mobileCreateLocalNotification sendezeit, true
                                                         play (klangpfad & DieZahl & ".wav") looping
                                                         aktuallisieren2 
                                                      end if
                                                   else
                                                      play empty
                                                      send aktuallisieren to me in 1 seconds
                                                   end if
                                                end aktuallisieren

                                                Ich habe es natürlich auch versucht ohne mobileCancelAllLocalNotifications auszukommentieren und noch andere Varianten.

                                                Aber egal wie ich es mache. Das Ergebnis ist immer, dass das Programm, beim Erreichen der Weckzeit beendet wird.

                                                Kann hier jemand weiterhelfen?

                                                Grüße Oliver

                                              • #37502
                                                Oliver122
                                                Teilnehmer

                                                  Hi Klaus,

                                                  danke für deine Mail vom 05.10. Ich wusste nicht, dass du die weiter oben gemeint hast.
                                                  Die hatte ich nicht gesehen und deshalb auch nicht geantwortet.

                                                  Habe jetzt erst in die Mails geschaut.

                                                  Danke das du sich damit befasst. Damit mache ich mich in jedem Fall auch noch vertraut.

                                                  Der Wecker funktioniert ja soweit. Nur das mit dem Standy klappt nicht. Habe den Wecker aber meiner
                                                  Frau versprochen. Deshalb möchte ich den erstmal hinbekommen.

                                                  Grüße Oliver

                                                • #37547
                                                  Klaus Major
                                                  Administrator

                                                    Hi Oliver,

                                                    alles klar!

                                                    OK, spontane Idee:
                                                    1. weckzeit, also der Parameter, der bestimmt, wann die LOCAL Notification abegeschickt werden soll muss in SEKUNDEN angegeben werden nicht im SMPTE Format 00:01:02.

                                                    “the seconds” = JETZT! Wie in -> put the seconds
                                                    Daher musst Du die eigentlich Weckzeit erst wieder in Sekunden umrechnen und als Parameter angeben.

                                                    2. Es fehlen eine Menge an wichtigen Parameter bei -> mobileCreateLocalNotification

                                                    3. Bin ich mir nicht sicher, ob das überhaupt so funktionieren wird!
                                                    Also wenn beim Ruhezustand schon z.B -> play FILE (klangpfad & “alarm.wav”)
                                                    nicht abgearbeitet wird, warum sollte der Rest dann funktionieren?

                                                    Aber wie gesagt, ich habe keine erfahrung mit mobileCreateLocalNotification,
                                                    daher bitte jemand anderer hier kompetent übernehmen, danke!

                                                    Gruß

                                                    Klaus

                                                  • #37551
                                                    Torsten
                                                    Teilnehmer

                                                      Hast Du es schon mal mit “send” probiert?

                                                      Im Sinne von

                                                      send "play_alarm" to me in XYZ seconds

                                                      wobei die Sekunden eben die Differenz zwischen der Zielzeit und der Zeit des Speicherns des Alarms ist?

                                                      Happy Scripting
                                                      Torsten

                                                    • #37552
                                                      Oliver122
                                                      Teilnehmer

                                                        Hi Klaus,

                                                        danke für die Info.

                                                        So wie ich das jetzt geändert habe, müsste mobileCreateLocalNotification in Sekunden angegeben sein.
                                                        Das Programm geht aber, bei Erreichen, der Zeit einfach aus.

                                                        Was die fehlenden angaben angeht. So wie ich das Dictonary verstehe, sind es nur Textteile, die z.B. gesendet werden soll. Aber hier soll ja nichts geschrieben werden, sondern nur das Handy aus dem Ruhemodus
                                                        gehen und der Wecker klingeln.

                                                        Was play FILE (klangpfad & “alarm.wav”) angeht. File lasse ich weg, weil es nicht funktioniert. Ohne File geht es.
                                                        Der Wecker kommt ja nur nicht aus dem Ruhemodeus. Lasse ich mobileCreateLocalNotification weg und
                                                        das Gerät ist noch nicht im Ruhemodus, funktioniert alles.

                                                        Zu Punkt 3: Ist die If nicht erfüllt, läuft ja nur die Uhr. Ich hoffe, weiß aber nicht ob er das im Ruhezustand macht

                                                        global  weckenaddieren, klangpfad, programmPfad, DieZahl, sendezeit
                                                        on openstack
                                                           put specialFolderPath ("resources") into programmPfad
                                                           put programmPfad &"/klang/" into klangpfad
                                                           aktuallisieren
                                                        end openstack
                                                        
                                                        on aktuallisieren
                                                           local mobileCreateLocalNotification
                                                           set the twelvehourtime to false
                                                           put the long time into fld "Uhr"
                                                           set the itemDelimiter to ":"
                                                           if item 1 of fld "Weckzeit" = item 1 of fld "Uhr" and item 2 of fld "Weckzeit" = item 2 of fld "Uhr" and item 3 of fld "Weckzeit" = item 3 of fld "Uhr" and the visible of fld "Weckzeit" = true then
                                                              put random(8) into DieZahl
                                                              put the seconds into sendezeit
                                                              if the environment is "mobile"  then
                                                                 #mobileCancelAllLocalNotifications
                                                                 mobileCreateLocalNotification sendezeit, true
                                                                 play (klangpfad & DieZahl & ".wav") looping
                                                                 aktuallisieren2 
                                                              end if
                                                           else
                                                              play empty
                                                              send aktuallisieren to me in 1 seconds
                                                           end if
                                                        end aktuallisieren
                                                        
                                                        on aktuallisieren2
                                                              set the twelvehourtime to false
                                                              put the long time into fld "Uhr"
                                                              send aktuallisieren2 to me in 1 seconds
                                                        end aktuallisieren2
                                                           
                                                        on weckeran
                                                           if the hilited of btn "Weckerein" = false then
                                                              hide fld "Weckzeit"
                                                              play empty
                                                              send aktuallisieren to me in 1 seconds
                                                           else
                                                              show fld "Weckzeit"
                                                              put "06:30:00" into fld "Weckzeit"
                                                           end if
                                                        end  weckeran
                                                        
                                                        on WZeitEinstellung
                                                           show grp "WZeitEinstellen"
                                                           put "06:30:00" into fld "Field2" of grp "WZeitEinstellen"
                                                        end WZeitEinstellung
                                                        
                                                        on EinstellungFertig
                                                           put fld "Field2" of grp "WZeitEinstellen" into fld "Weckzeit"
                                                           hide grp "WZeitEinstellen"
                                                           send aktuallisieren to me in 1 seconds
                                                        end EinstellungFertig
                                                           
                                                           
                                                           on Schlafdauer
                                                           play empty
                                                           send aktuallisieren to me in 1 seconds
                                                           set the itemDelimiter to ":"
                                                           if item 1 of fld "Weckzeit" < 23 and (item 2 of fld "Weckzeit" + 10) >59 then
                                                              wecken1
                                                           end if
                                                           
                                                           if item 1 of fld "Weckzeit" = 23  and (item 2 of fld "Weckzeit" + 10) >59 then
                                                              wecken2
                                                           end if
                                                           
                                                           if item 1 of fld "Weckzeit" < 23 and (item 2 of fld "Weckzeit" + 10) <= 59 or item 1 of fld "Weckzeit" = 23  and (item 2 of fld "Weckzeit" + 10) <=59  then
                                                              wecken3
                                                           end if
                                                           if weckenaddieren < 10 then
                                                              put 0 before weckenaddieren
                                                           end if
                                                           put weckenaddieren into item 2 of fld "Weckzeit"
                                                        end Schlafdauer
                                                        
                                                        on wecken1
                                                           set the itemDelimiter to ":"
                                                           add 1 to item 1 of fld "Weckzeit"
                                                           put item 2 of fld "Weckzeit"  into weckenaddieren
                                                           add 10 to  weckenaddieren
                                                           subtract 60 from  weckenaddieren
                                                        end wecken1
                                                           
                                                        on wecken2
                                                           set the itemDelimiter to ":"
                                                           put 0 into item 1 of fld "Weckzeit"
                                                           put item 2 of fld "Weckzeit"  into weckenaddieren
                                                           add 10 to  weckenaddieren
                                                           subtract 60 from  weckenaddieren
                                                        end wecken2
                                                           
                                                        on wecken3
                                                           set the itemDelimiter to ":"
                                                           put item 2 of fld "Weckzeit"  into weckenaddieren
                                                           add 10 to weckenaddieren
                                                        end wecken3

                                                        @ Torsten. Kannst du hier helfen?

                                                      • #37553
                                                        Oliver122
                                                        Teilnehmer

                                                          Das ist jetzt einfach mal das ges. Skript.

                                                      Ansicht von 25 Antwort-Themen
                                                      • Du musst angemeldet sein, um auf dieses Thema antworten zu können.