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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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
      Verwalter

      Nur der Bildschirm ausgeschaltet oder das ganze Gerät?

    • #37457
      Oliver122
      Teilnehmer

      Hi Klaus,

      nur der Bildschirm.

      LG. Oliver

    • #37458
      Klaus Major
      Verwalter

      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
      Verwalter

      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
      Verwalter

      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.