Maximale Lautstärke per modifier Karte setzen?

Hallo,
gibt es eine Möglichkeit die maximale Lautstärke per modifier Karte festzulegen? Ich möchte zum einschlafen die max. Lautstärke runter setzen und tagsüber wieder erhöhen, und dafür nicht immer ins admin Menü gehen…
Ich habe hier lange gesucht aber nichts gefunden, hat jemand eine Idee für eine Umsetzung?
Meine Programmierfähigkeiten sind leider extrem eingeschränkt bis kaum vorhanden… :slight_smile:

Nur für mein Verständnis, Wieso bestätigst du nicht einfach die Lautstärke taste oder setzt generell die Initiallautstärke runter?

wahrscheinlich wird das Kind selbst dran rum spielen?

Du könntest einfach die Eingaben sperren.
Da gibt es zwei Optionen:

  • Option A: du sperrst die Tasten aber lässt noch Karten zu → Krabbler Modus
  • Option B: du sperrst jede Eingabe → TonUINO Sperren

Aber es wäre auch eine sinnvolle Ergänzung zum Schlummermodifier.

Danke für eure Antworten, ich fürchte ich war nicht ausführlich genug…

  1. Ja, das Kind spielt selbst daran herum, sie macht nämlich selbstständig lauter sobald ich raus bin.
  2. Ich aktiviere wenn ich rausgehen mit einer karte den sleep timer für 20 min., und ich habe gelesen, dass die modifier sleep timer und sperre gleichzeitig nicht funktionieren.

Sie darf ja dann auch gerne nochmal ein anderes hörspiel starten, aber nach 20 min soll die Kiste ausgehen, und es soll eben nicht zu laut sein damit sie einschlafen kann.
Klar, sie kann ohne die sperre auch den sleep timer umgehen, aber das tut sie nicht weil es „klingelt“ wenn sie die sleep timer karte nochmal auflegt oder die Kiste aus und wieder einschaltet, und sie weiss, dass wir das auf dem Babyphone hören.
Wenn sie aber nur ein bischen lauter macht können wir das nicht sicher identifizieren, und das weiss sie auch… :slight_smile:

Die Funktion „lautstärkeerhöhung ansagen“ wäre ja eine theoretische Möglichkeit, aber das würde mich tagsüber zu sehr nerven, und wenn ich das wieder im admin Menü abends an- und morgens ausschalten muss kann ich auch gleich die max. Lautstärke im admin Menü setzen…

Daher hätte ich gerne eine Karte/Figur die ich abends auflegen um eine niedrige max. Lautstärke zu setzen und eine andere um tagsüber eine höhere zu setzen. Und das muss natürlich auch zusammen mit dem sleep timer funtionieren…

Wie schon geschrieben kann ich nicht programmieren, ich kriege es wohl hin im Code etwas auf Anweisung zu ändern oder zu ergänzen, aber selbst etwas „erfinden“ ist leider nicht drin…

Ich habe auch eine ähnliche Frage gefunden:

Da stand es ginge mit dem Feedback modifier, ich habe aber keine Ahnung was das ist und wie das gemeint war. In dem Beispiel sollte auch mit nur einer karte aktiviert und deaktiviert werden können, das brauche ich ja nicht, mir wäre eine karte mit einem einzigen Befehl „setze max. Lautstärke niedrig“ und eine mit „setze max. Lautstärke hoch“ am liebsten…

Das sollte doch irgendwie möglich sein!?

Nachtrag: Der Befehl kann genau dem Befehl entsprechen der über die Funktion im admin Menü ausgeführt wird, nur eben als „shortcut“ per Karte und nicht über den langen Weg im admin Menü…

Völlig weg von deinem Ansatz, eventuell hast du ja dich Lust dich mit ein wenig programmieren zu befassen…
Wie wäre es mit einem Ds3231, also einer Uhr für den Arduino.
Über die kann man schauen

If Stunde >= 18 then 
Max Lautstärke = 8
Else
Eeprom.Lautstärke

Ich denke, mit ein wenig Zeit und etwas Interesse sicher lösbar.
Man muss auch löten können, da scheitert es leider für viele.
Und mit der AiO sollte es nichts werden

Edit:
Hört sie denn immer bis zum Ausschalttimer?
Wer macht die Box an abends?
Nutzt ihr immer den 20 Minuten Timer?

Genau das gleiche wie bei mir zu Hause :joy: ich würde mich freuen wenn es hierfür eine Lösung gibt. Dann würde ich das auch nutzen :relieved:

Die Vermutung hatte ich auch zu erst, war mir nur nicht sicher xD

Es stimmt, dass man nur einen Modifier aktiviert haben kann. Der kann aber zusätzliche Funktionen bekommen.

Dabei ist es natürlich am einfachsten einfach Code aus einem anderen Modifier zu klauen. Sehr leicht möglich ist also das, was andere Modifier so können. Überleg mal welche Taster gesperrt sein sollen und ob die Erkennung neuer Karten noch funktionieren soll. Dann schauen wir wo du was einfügen musst.

1 „Gefällt mir“

Danke für eure Antworten!

@raznz_snasna : Ich kann zwar definitv besser löten als programmieren, aber dein Vorschlag scheint mir doch etwas zu aufwendig und leider auch nicht wirklich passend. Ich kann eigentlich keine Zeit definieren, denn z.B. am Wochenende geht meine Tochter später ins Bett. Angenommen ich würde definieren „ab 20Uhr leise“ und sie bleibt länger auf und will noch im Wohnzimmer hören möchte wäre die Einschlaflautstärke zu leise, nehme ich einen späteren Zeitpunkt und sie geht früher ins Bett wäre es zu laut…
Zu deinen Fragen:
Hört sie denn immer bis zum Ausschalttimer?
→ sie sollte eigentlich vor Ende des Timer eingeschlafen sein, klappt aber natürlich nicht immer, vor allem nicht wenn es zu laut ist.
Wer macht die Box an abends?
→ sie gem. unserer Anweisung
Nutzt ihr immer den 20 Minuten Timer?
→ Meistens, ab und zu gestatte ich ihr noch ein paar Minuten extra oder mache ihn kürzer wenn es schon spät ist. Dazu ändere ich dann relativ bequem über die Handy App den Wert auf der sleeptimer modifier karte.

@Gute_Laune : Dein Ansatz klingt schon besser, es würde eigentlich reichen wenn mit dem sleeptimer die „lauter“-Taste gesperrt würde (solange die Sperre wieder aufgehoben ist wenn ich den sleeptimer ausschalte oder nachdem ich die Kiste einmal komplett aus- und wieder angeschalte).
Die Probleme dabei wären aber vermutlich, dass ich

  1. Die sleeptimer karte nicht mehr über das handy programmieren kann weil der geänderte code dann nur in der kiste und nicht in der Handy app steckt!? und
  2. Ich nicht mehr 20 min. einschalten kann weil über das Admin Menü 20 min. nicht als option angeboten wird (das wäre aber wohl leichter anzupassen)!?

Deswegen will ich noch nicht so ganz von meinem ursprünglichen Wunsch mit 2 separaten Karten weg.
Ich habe mal im Code geschaut und folgendes gefunden:

void resetSettings() {
  Serial.println(F("=== resetSettings()"));
  mySettings.cookie = cardCookie;
  mySettings.version = 2;
  mySettings.maxVolume = 25;
  mySettings.minVolume = 5;
  mySettings.initVolume = 15;
  mySettings.eq = 1;
  mySettings.locked = false;
  mySettings.standbyTimer = 0;
  mySettings.invertVolumeButtons = true;
  mySettings.shortCuts[0].folder = 0;
  mySettings.shortCuts[1].folder = 0;
  mySettings.shortCuts[2].folder = 0;
  mySettings.shortCuts[3].folder = 0;
  mySettings.adminMenuLocked = 0;
  mySettings.adminMenuPin[0] = 1;
  mySettings.adminMenuPin[1] = 1;
  mySettings.adminMenuPin[2] = 1;
  mySettings.adminMenuPin[3] = 1;

  writeSettingsToFlash();
}

Könnte man daraus nicht folgendes nehmen:

void resetSettings() {
  mySettings.maxVolume = 25;
  writeSettingsToFlash();
}

und damit irgendwie ein neues

class MaxVolume: public Modifier {

basteln, wo jeweils einmal die hohe und einmal die niedrige Lautstärke drin steckt?

Auf der RFID-Karte ist nur die Nummer des Modifiers und die Dauer gespeichert. Die sind unabhängig davon, was der Code damit macht. Du kannst du Karte also genauso weiter von Handy konfigurieren. Modifier Nummer 1 ist dann immernoch der Sleeptimer und ließt die konfigurierte Zeit, nur startet der nicht nur einen Timer, sondern blockiert auch die lauter-Taste.

Danke für deine blitzschnelle Antwort!

Das ist super, also würde es gehen wenn ich das hier:

 virtual bool handleVolumeUp()   {
      Serial.println(F("== Locked::handleVolumeUp() -> LOCKED!"));
      return true;
    }

in den Sleeptimer modifier Abschnitt schreibe? Also im ganzen dann so:

class SleepTimer: public Modifier {
  private:
    unsigned long sleepAtMillis = 0;

  public:
    void loop() {
      if (this->sleepAtMillis != 0 && millis() > this->sleepAtMillis) {
        Serial.println(F("=== SleepTimer::loop() -> SLEEP!"));
        mp3.pause();
        setstandbyTimer();
        activeModifier = NULL;
        delete this;
      }
    }

    SleepTimer(uint8_t minutes) {
      Serial.println(F("=== SleepTimer()"));
      Serial.println(minutes);
      this->sleepAtMillis = millis() + minutes * 60000;
      //      if (isPlaying())
      //        mp3.playAdvertisement(302);
      //      delay(500);
    }
    uint8_t getActive() {
      Serial.println(F("== SleepTimer::getActive()"));
      return 1;
    }
    virtual bool handleVolumeUp()   {
      Serial.println(F("== Locked::handleVolumeUp() -> LOCKED!"));
      return true;
    }
};

Ja genau, so hätte ich das versucht.

Perfekt, ich versuche und berichte!

Und danke für die Korrektur! :slight_smile:

1 „Gefällt mir“

Aber ist nun auch ein Schutz vor dem Neustart dabei?

1 „Gefällt mir“

Genau so ist es, sie weiss das die Kiste weg ist wenn wir hören das sie dran rumfummelt! :wink:

Ich kann den Neustart sowieso nicht verhindern, ich habe einen Hardwareschalter für die Stromversorgung in die Kiste eingebaut. Aber wenn sie aus- und einschaltet kommt ja auch das Einschaltgeräusch vom Tonuino… :slight_smile:

Sie behauptet stolz sie sei ein schlauer Fuchs, aber wir müssen ihr ab und zu zeigen, dass die alten Füchse noch ein bischen schlauer sind! :smile:

3 „Gefällt mir“

Die Änderung oben kannst du in meinem Affenboxfork versuchen, der hat die Möglichkeit, Modifier auch bei Neustart bestehen zu lassen.

Falls das Interessant ist