Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Wenn ich aber im Editor einen Relativen Pfad angebe
Nenn bitte ein konkretes Beispiel, welche URI er nicht akzeptiert.
Der Typ URI wird beispielsweise auch bei image-widgets für das src-Attribut verwendet - wird es da bei dir akzeptiert?
Also ich habe jetzt mal ein Bisschen was probiert, stosse jedoch auf Probleme.
Das Audio Element wird irgendwie erst aktiv nachdem ich die GA mit dem Trigger ein paar mal ein und wieder ausgeschaltet habe. Wie kann das kommen? könnt ihr das nachvollziehen?
Dann weis ich nicht wie ich das audio element ansprechen kann.
Ich möchte dort wo alert('play'); / alert('play'); steht eigentlich das auddio mit .play() und .pause() starten resp. anhalten.
Ich weis jedoch nicht wie ich vom "element" zum audio komme.
Die Alerts erscheinen, also das Widget reagiert korrekt auf die statusänderungen der GA.
Wie ist hier eigentlich der aktuelle Stand?! Gerade ein Sound on GA würde mich interessieren. Dabei wäre noch zu überlegen, ob man mittels eines Parameters die Wiederholungsfrequenz definieren kann - also sowas die "Play 1x" oder "Play 1x pro Minute".
Ist denn Deine Version des Sound Plugins denn im SVN?
Da hat sich nichts geändert, hatte schlichtweg keine Zeit.
Ist halt wie bei vielen anderen, die Ideen wären da aber keine Change das alles umzusetzen,
resp. geht es meistens nicht über die Idee oder den Prototyp hinaus...
Nein ist nicht im SVN, gibt nur das im obigen Beitrag.
Ich möchte auch gerne über meine Visu eine Audio Datei abspielen. Wie ist der aktuelle Stand? Wurde an diesem Feature noch gearbeitet oder gibt es unterdessen eine andere Möglichkeit?
Ansonsten würde ich von meiner Seite her einen Versuch starten die noch bestehenden Probleme zu lösen.
Soweit ich weiss, hat sich in diese Richtung leider nichts mehr getan. Wenn du die nötigen Fähigkeiten besitzt um die angedachte Idee in ein fertiges CV Plugin umzusezen wäre dies natürlich toll
Ich habe nun meine Version fertig. Getestet habe ich noch nicht gross. Also wenn jemand Zeit hat ;-)
Folgende Feature habe ich realisiert:
autoplay = true : spielt die Musikdatei beim ersten öffnen ab
loop = true : spielt die Musikdatei im loop ab
on_value = 1 und off_value = 0 : in Verbindung mit einer addresse DPT 1.001 wird beim Empfangen von einer 1 die Musikdatei abgespielt. Bei 0 passiert nichts. Dies kann natürlich auch anderst gemapped werden.
volume funktioniert noch nicht!
src : habe ich mit relativem Pfad sowohl einer wav und einer mp3 Datei getestet.
id: eine beliebige Kennzeichnung (text) zur Identifizierung von verschiedenen audio Elementen.
Die Änderungen sind noch nicht im svn. Hier ist der manuelle Weg für die Installation:
In ./structure/pure/ ein audio.js Datei erstellen mit folgendem Inhalt:
Code:
/* audio.js (c) 2014 by Markus Damman
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
basicdesign.addCreator('audio', {
create: function( element, path, flavour, type ) {
var $e = $(element);
// create the main structure
var ret_val = basicdesign.createDefaultWidget( 'audio', $e, path, flavour, type, this.update);
// and fill in widget specific data
ret_val.data( {
'src' : $e.attr('src'),
'id' : $e.attr('id'),
'width' : $e.attr('with'),
'height' : $e.attr('height'),
'autoplay': $e.attr('autoplay'),
'loop' : $e.attr('loop'),
'on_value' : $e.attr('on_value' ) || 1,
'off_value' : $e.attr('off_value') || 0
} );
var data = ret_val.data();
// create the actor
var style = '';
if( data.width ) style += 'width:' + data.width + ';';
if( data.height ) style += 'height:' + data.height + ';';
if( style != '' ) style = 'style="' + style + '"';
var autoplay = (data.autoplay == 'true') ? ' autoplay ' : '';
var loop = (data.loop == 'true') ? ' loop ' : '';
var $actor = $('<div class="actor"><audio id="' + $e.attr('id') + '" ' + autoplay + loop + ' controls> <source src="' +$e.attr('src') + '" > </audio> </div>');
ret_val.append( $actor );
// initially setting a value
basicdesign.defaultUpdate(undefined, undefined, ret_val, true);
return ret_val;
},
update: function(e,d) {
var element = $(this);
var actor = element.find('.actor');
var value = basicdesign.defaultUpdate( e, d, element, true );
var on = templateEngine.map( element.data( 'on_value' ), element.data('mapping') );
if (value == on){
var audioWidget = document.getElementById(element.data('id'));
if (audioWidget.paused == true)
audioWidget.play();
};
}
});
In der visu_config.xsd unter <xsd:group name="Widgets"> folgendes ergänzen:
Code:
<xsd:element name="audio" type="audio" />
Dann noch vor dem video Widget folgendes neu hinzufügen:
Dank deiner guten Beschreibung konnte ich mich zum Glück leicht einarbeiten. Ich habe übrigens nur den Use Case für eine Alarmmeldung implementiert. Sobald ein regelmässig gesendeter Event von 0 auf 1 ändert wird bei jedem eintreffen eines 1 der Alarm Ton abgespielt und erst wieder bendet, wenn keine 1 mehr Empfangen werden.
Klüger wäre vermutlich einfach nur einen Schwellwert zu realisieren threshold_value >= Schwellwert => Alarm und eine Unterdrückung supress_value = 1 welche den Benützer den Alarm akzeptieren lässt.
Daher hier noch die Änderungen für das audio.js:
Code:
/* audio.js (c) 2014 by Markus Damman
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
basicdesign.addCreator('audio', {
create: function( element, path, flavour, type ) {
var $e = $(element);
// create the main structure
var ret_val = basicdesign.createDefaultWidget( 'audio', $e, path, flavour, type, this.update);
// and fill in widget specific data
ret_val.data( {
'src' : $e.attr('src'),
'id' : $e.attr('id'),
'width' : $e.attr('with'),
'height' : $e.attr('height'),
'autoplay': $e.attr('autoplay'),
'loop' : $e.attr('loop'),
'threshold_value' : $e.attr('threshold_value' ) || 1
} );
var data = ret_val.data();
// create the actor
var style = '';
if( data.width ) style += 'width:' + data.width + ';';
if( data.height ) style += 'height:' + data.height + ';';
if( style != '' ) style = 'style="' + style + '"';
var autoplay = (data.autoplay == 'true') ? ' autoplay ' : '';
var loop = (data.loop == 'true') ? ' loop ' : '';
var $actor = $('<div class="actor"><audio id="' + $e.attr('id') + '" ' + autoplay + loop + ' controls> <source src="' +$e.attr('src') + '" > </audio> </div>');
ret_val.append( $actor );
// initially setting a value
basicdesign.defaultUpdate(undefined, undefined, ret_val, true);
return ret_val;
},
update: function(e,d) {
var element = $(this);
var actor = element.find('.actor');
var value = basicdesign.defaultUpdate( e, d, element, true );
var on = templateEngine.map( element.data( 'threshold_value' ), element.data('mapping') );
if (value >= on){
var audioWidget = document.getElementById(element.data('id'));
if (audioWidget.paused == true)
audioWidget.play();
};
}
});
Eine Unterdrückung ist noch nicht realisiert, da ich nicht sicher bin ob es überhaupt Sinn macht. Soll ich auch noch ein attribute implementieren, welches den threshold_value umkehrt? Dies würde dann beim Unterschreiten des threshold_value den Alarm auslösen.
Da es reines HTML 5 ist bin ich nicht sicher ob sich ein Plugin lohnt. So oder so müsste dann auch das bestehende Video Element genau gleich gestaltet werden. Eine Überarbeitung würde diesem Element auf jeden Fall gut tun ;-) Es ist ein wenig in die Jahre gekommen.
Im Style attribute hat es noch zwei Fehler gehabt. Hier ist die Korrektur:
Code:
/* audio.js (c) 2014 by Markus Damman
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
basicdesign.addCreator('audio', {
create: function( element, path, flavour, type ) {
var $e = $(element);
// create the main structure
var ret_val = basicdesign.createDefaultWidget( 'audio', $e, path, flavour, type, this.update);
// and fill in widget specific data
ret_val.data( {
'src' : $e.attr('src'),
'id' : $e.attr('id'),
'width' : $e.attr('width'),
'height' : $e.attr('height'),
'autoplay': $e.attr('autoplay'),
'loop' : $e.attr('loop'),
'threshold_value' : $e.attr('threshold_value' ) || 1
} );
var data = ret_val.data();
// create the actor
var style = '';
if( data.width ) style += 'width:' + data.width + ';';
if( data.height ) style += 'height:' + data.height + ';';
if( style != '' ) style = 'style="' + style + '"';
var autoplay = (data.autoplay == 'true') ? ' autoplay ' : '';
var loop = (data.loop == 'true') ? ' loop ' : '';
var $actor = $('<div class="actor"><audio id="' + $e.attr('id') + '" ' + autoplay + loop + style + ' controls> <source src="' +$e.attr('src') + '" > </audio> </div>');
ret_val.append( $actor );
// initially setting a value
basicdesign.defaultUpdate(undefined, undefined, ret_val, true);
return ret_val;
},
update: function(e,d) {
var element = $(this);
var actor = element.find('.actor');
var value = basicdesign.defaultUpdate( e, d, element, true );
var on = templateEngine.map( element.data( 'threshold_value' ), element.data('mapping') );
if (value >= on){
var audioWidget = document.getElementById(element.data('id'));
if (audioWidget.paused == true)
audioWidget.play();
};
}
});
Stoppen kann man eine Alarmmeldung durch Stummschalten. Ich werde also nichts mehr besonderes dazu implementieren.
Ich habe auch noch mehrere verschiedene Sound Objekte getestet und auch die Überwachung von drei VOC Sensoren über ein Sound Element getestet. Scheint alles zu funktionieren.
Klüger wäre vermutlich einfach nur einen Schwellwert zu realisieren threshold_value >= Schwellwert => Alarm und eine Unterdrückung supress_value = 1 welche den Benützer den Alarm akzeptieren lässt.
Hier bitte aufpassen. Eine Visu ist keine Logik Engine. Und gerade Themen wie Schwellwert gehören eher in eine Logik Engine...
=> Bei diesem Feature bitte bewusst eine Grenze der Funktion ziehen
Da es reines HTML 5 ist bin ich nicht sicher ob sich ein Plugin lohnt.
Das ist so klein und braucht v.a. keine weiteren Ressourcen von daher sehe ich das auch eher als Widget und nicht als Plugin.
Ich würde vorschlagen Du commitest das in's SVN. Dann können das weitere Leute sehr einfach testen und es kann bis zum nächsten Release wunderbar reifen.
TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar