Hauptmenü

Neuer Style: f18

Begonnen von rudolfkoenig, 07 Januar 2018, 14:51:18

Vorheriges Thema - Nächstes Thema

schwatter

Im Anhang styleData. Damit wird das Mobileansicht auf Desktop erzeugt.
Ein Auslöser fällt sofort auf:
"Pinned.menu": false,Warum das so ist wie es ist. Keine Ahnung. Wechselwirkung von f18 und Flex aus alten Tagen?
Oder nur durch f18 aus alten Tagen. Oder ich, mich nehme ich auch nicht aus der Gleichung.
Mein System läuft schon mehrere Jahre.

Gruß schwatter

Beta-User

#496
Zitat von: rudolfkoenig am 02 Mai 2026, 10:08:58Das Feature ist nicht TTS only, es gibt womoeglich Szenarien, wo man nur in einem bestimmten Raum die Toene haben will.
:)
So langsam dämmert mir, dass das vielleicht doch halbwegs nachvollziehbar in eine multi-Endpoint-Landschaft passen könnte...

@Rudi: magst du noch je ein "Ausgabe ist fertig"-Event einbauen?

Beispiel-Code für tts ist in meinem wip-Thread zu finden, Link reiche ich bei Bedarf nach.

Nachtrag: eine "normale" Play audio "-Funkion mit Aufruf durch über den File-Pfad (unter www) wäre trotzdem schön, v.a., wenn die auch das "bin fertig "-Event generieren würde.
Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rudolfkoenig

Zitat"Pinned.menu": false,
Das habe ich beim Umbau uebersehen, und habs hoffentlich jetzt gefixt.

ZitatKönntest du bitte noch ein "Mobileansicht erzwingen" Modus einbauen.?
Wenn damit nur das Menue gemeint ist, das kann man nach dem Fix (wie auch bisher) ueber den folgenden Weg erreichen:
Hide pin deaktivieren, Pin im Menue abziehen.

ZitatBeispiel-Code für tts ist in meinem wip-Thread zu finden, Link reiche ich bei Bedarf nach.
Bedarf

ZitatNachtrag: eine "normale" Play audio "-Funkion mit Aufruf durch über den File-Pfad (unter www) wäre trotzdem schön
Was genau meinst Du damit?
Bitte um Beispiel aus Anwendersicht.

schwatter

#498
Zitat von: rudolfkoenig am 02 Mai 2026, 14:37:17
ZitatKönntest du bitte noch ein "Mobileansicht erzwingen" Modus einbauen.?
Wenn damit nur das Menue gemeint ist, das kann man nach dem Fix (wie auch bisher) ueber den folgenden Weg erreichen:
Hide pin deaktivieren, Pin im Menue abziehen.

Das war der richtige Tip, danke. Wahrscheinlich habe ich das vor Jahren einmal eingerichtet und dann direkt vergessen...
Nach deinem letzten Update ist auch alles wieder ok.

Edit:
Würdest du vielleicht meinen Wunsch noch erfüllen? Wie schon geschrieben, bei viel JS wie Widgets und Co. kommt es zu
Cumulative Layout Shift. Das an- und abschaltbar machen bringt auch nix. Und wenn es drinne ist, sagtest du ja selbst,
du merkst keinen Unterschied:

In f18.js in Zeile 24 hinzufügen:
$(window).on('load', function() {$('body').css('opacity', 1);});
Und in f18style.css Zeile 3:
body { opacity: 0; }
Gruß schwatter

Beta-User

Zitat von: rudolfkoenig am 02 Mai 2026, 14:37:17Was genau meinst Du damit?
Bitte um Beispiel aus Anwendersicht.
Hmm, geht weniger um die "Anwendersicht", das ist eher "Entwickler", s.u.:
Zitat von: Beta-User am 01 Mai 2026, 07:47:41es geht um zwei Zeitpunkte:
1. Wann kann die Ausgabe starten, und
2. wann ist sie beendet?

Das mit additionalInform ist zunächst mal eine Option für den ersten Zeitpunkt. Ich werde mir das ansehen (Danke noch für das diff hier weiter oben), wie schon weiter oben mal angekündigt.

Für die "Interaktivität" im Sinne dieses Threads ist aber das 2., das "bin fertig"-Event genauso wichtig...
In diesem Code "verborgen" in dem "utterance.onend = ..."-Handler.
Zitat@Rudi - falls du hier mitliest: Scheinbar hatte ich bisher noch nicht meine modifizierte f18_speak() mit dem "bin fertig"-Event gezeigt.

Hier die Roh-Fassung:
Code Auswählen Erweitern
Code Auswählen Erweitern
function
f18_speak(txt)
{
  let synth = window.speechSynthesis;
  if(!synth)
    return FW_okDialog("No speechSynthesis available");

  const utterance = new SpeechSynthesisUtterance(txt);
   
  // Good practice: Set listeners even if they're unreliable on all voices
  utterance.onend = () => {
        var fw_id = $("body").attr("fw_id");
        FW_cmd(`${FW_root}?cmd=setreading `+
               `TYPE=FHEMWEB:FILTER=FW_ID=${fw_id}:FILTER=inform=.%2B `+
               `TTS_state finished&XHR=1`);
  };

  synth.speak(utterance);
  //speechSynthesis.speak(new SpeechSynthesisUtterance(txt));
  //see https://iifx.dev/en/articles/457363230/chrome-tts-workarounds-solving-the-speechsynthesisutterance-event-and-initial-speak-failure for more info
}

Wofür diese Art Event?
Für manche "dialogische Lösungen" (es gibt neben RHASSPY insbesondere noch was mit rivescript von pah, vermutlich "kann" sowas auch Babble) möchte man solange das Mikro geschlossen halten, solange die laufende Ansage eben läuft, und wartet danach wieder auf eine (weitere) Eingabe, z.B. um eine Anweisung weiter einzugrenzen, eine Bestätigung abzuwarten, usw..
Dafür lauchst jetzt eben z.B. RHASSPY auf FHEMWEB-Events, um dann das Mikro wieder aufzumachen, falls noch was einzusprechen ist (oder eben nicht aufzumachen, wenn das nicht der Fall ist).

Dewesgen hätte ich eben gerne bei jeder Art der aus FHEM heraus inititierten Sound-Ausgabe einen dazu passenden "bin fertig mit der Ausgabe"-Event (kann ruhig eine differenzierte Event-Info sein, je nachdem, ob es audio oder tts war).
Server: HP-elitedesk@Debian 13, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

noansi

#500
Hallo Rudolf,

ist in Zeile 238 (f18.js Changeset 31174 Stand) e?.length ein Syntaxfehler/Tippfehler?
      if(e?.length==3 && typeof(e[0])=="string" && e[0].match(/-lastFilename$/)) {
Was soll das '?' bewirken (ich habe die Syntax auf die Schnelle nicht gefunden)?

      if(e.length==3 && typeof(e[0])=="string" && e[0].match(/-lastFilename$/)) { // noansi: e?.lenght corrected?!?
Ohne '?' meckert die Java Konsole jedenfalls nicht mehr. Und die Darstellung im Browser sieht wieder normal aus (keine Soundwiedergabe Nutzung meinerseits).

Edit: Semantik gefunden, e != null && e.length==3 wäre eine rückwärtskompatible(re) Alternative.

Gruß, Ansgar.

rudolfkoenig

Es geht hier um "Optional Chaining" (https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Optional_chaining)
Falls e undefined ist, dann ist e?.length undefined, und kein Exception.
Damit ist e?.length aequivalent mit (e==undefined ? undefined : e.length)

Laut caniuse kann das jeder Browser ab 2020.
Was verwendest Du fuer einen Browser?

noansi

Hallo Rudolf,

danke für die Erklärung.
Ein alter Firefox 52.9.0 dient mir gelegentlich als lokales Terminal. Da ist es mir nach f18.js Aktualisierung aufgefallen.

Gruß, Ansgar.