NEWS
[gelöst] Favoriten Harmony Adapter
-
Hi Pix,
vielen Dank für die Antwort. Leider komme ich mit dem Script
nicht klar. Egal welches Script ich ausführe, ich bekomme im Log
immer eine Fehlermeldung: "Invalid regular expression: missing /".
Ich habe versucht einfach nur eine Lampe einzuschalten, da kommt diese
Meldung. Was kann das sein?
MfG
-
Hofmannha häng doch mal einen Screenshot der Fehlermeldung an auf der man sieht welcher Adapter die Fehlermeldung aus spuckt und dein(e) scripte.
Die Fehlermeldung sagt es fehlt ein "/", aber wo kann man so nicht sagen.
Gesendet von meinem Tab2A7-10F mit Tapatalk
-
Hi pix,
ich habe es gefunden, woran es liegt. Ich hatte in der Konfiguration des javascript-Adapters
vergessen die Länge und Breite einzutragen. Dann kommt diese Fehlermeldung.
Gruß
7572_unbenannt.jpg -
Hallo pix,
ich brauche noch mal deine Hilfe.
Ich habe ein Script erstellt nach deinem Schema und es funktioniert.
Danke dafür.
Taste_101
setState("harmony.0.Wohnzimmer.Philips-Fernseher.Number1", 250); // nach 0s (kein Delay, nur setState) für 250ms lang Taste 1 drücken
setStateDelayed("harmony.0.Wohnzimmer.Philips-Fernseher.Number0", 250, 500); // nach 500ms für 250ms Taste 0 drücken
setStateDelayed("harmony.0.Wohnzimmer.Philips-Fernseher.Number1", 250, 800); // nach weiteren 300ms für weitere 250ms Taste 1 drücken
Ich möchte nun dieses Script "Taste_101" mit einem Button starten.
Es funktioniert nicht.
Wenn ich auf "Script neu starten" in dem Tab Scripte drücke funktioniert es, aber mit einem
Button mit der entsprechenden Object ID nicht.
Zudem ist mir aufgefallen, dass wenn ich das Script neu erstelle, es unter der Object-ID im Object-Browser nicht sichtbar ist.
Erst wenn ich noch mal das Script editiere, und erneut speichere, erst dann ist es unter der Object-ID im Object-Browser sichtbar.
Gruß
-
Hallo hofmannha,
die Skripte sind nur im Skriptreiter sichtbar, nicht unter Objekte.
@hofmannha:Erst wenn ich noch mal das Script editiere, und erneut speichere, erst dann ist es unter der Object-ID im Object-Browser sichtbar. ` Nicht das Skript ist sichtbar, sondern die mit createState erstellten Objekte.
Wenn ich auf "Script neu starten" in dem Tab Scripte drücke funktioniert es, aber mit einem
Button mit der entsprechenden Object ID nicht. ` Was meinst du mit "Button der entsprechenden Object ID"?
Womit möchtest du das Skript starten? Mit einem Tastendruck auf einem Homematic-Gerät? Ein VIS Widget? Zeitgesteuert?
Ich muss da genau nachfragen, sonst reden wir aneinander vorbei.
Pix
-
Hallo Pix,
vielleicht nerve ich.
Ich möchte ganz einfach obiges Script über einen Button starten.
Der Hintergrund ist, dass ich meine TV-Favoriten über eine View mit
Widgets (Senderlogos) erstellen möchte und über den Harmony-Hub
Mein TV auf das entsprechende Programm zu schalten.
Das Obige Script von Dir funktioniert aber wie kann ich mit einem Widget starten?
Gruß
-
Hallo,
nein, du nervst nicht. Jetzt weiß ich, dass du einen Button in VIS meinst.
Bluefox hat dafür hier mal ein Skript geschrieben.
http://forum.iobroker.net/viewtopic.php … tien#p8035
Ist daraus nur ein kleiner Ausschnitt.
Ich würde das so machen:
// Variable zum Triggern anlegen createState('harmony.101', false, { name:'Harmony Aktion Tasten 101 drücken', type: 'boolean', read: true, write: true }); // in ID packen var id101 =' javascript.0.harmony.101'; // bitte prüfen, ob das Skript auch in Instanz 0 läuft, sonst anpassen // Aktion in Funktion gepackt function 101_druecken () { setState("harmony.0.Wohnzimmer.Philips-Fernseher.Number1", 250); // nach 0s (kein Delay, nur setState) für 250ms lang Taste 1 drücken setStateDelayed("harmony.0.Wohnzimmer.Philips-Fernseher.Number0", 250, 500); // nach 500ms für 250ms Taste 0 drücken setStateDelayed("harmony.0.Wohnzimmer.Philips-Fernseher.Number1", 250, 800); // nach weiteren 300ms für weitere 250ms Taste 1 drücken } // Trigger (wenn Trigger-Variable true) on(id101, function (obj) { if (!obj.newState.ack && obj.newState.val) { log('VIS Button <harmony 101="">gedrückt'); 101_druecken(); // Aktion setState(id101, false); // zurücksetzen } });</harmony>
In VIS packst du dann in die Einstellungen des Buttons die OID javascript.0.harmony.101
Und natürlich kannst du für jede Harmony-Aktion eine weitere Variable und weitere Funktion anlegen. Du musst nur auf die Übersichtlichkeit achten.
Gruß
Pix
-
Hallo Pix,
vielen Dank für deine Mühe.
Ich habe das Script von Dir eingefügt und etwas geändert. Eine Funktion darf nicht
mit einer Zahl beginnen. Ich habe mit javascript bisher nichts am Hut gehabt. Ich habe
in der Vergangenheit mit Visual Studio und tcl gearbeitet.
Ich habe es jetzt so geändert.
// Variable zum Triggern anlegen
createState('harmony.T101', false, {
name:'Harmony Aktion Tasten 101 drücken',
type: 'boolean',
read: true,
write: true
});
// in ID packen
var id101 =' javascript.0.harmony.T101'; // bitte prüfen, ob das Skript auch in Instanz 0 läuft, sonst anpassen
// Aktion in Funktion gepackt
function druecke_101 () {
setState("harmony.0.Wohnzimmer.Philips-Fernseher.Number1", 250); // nach 0s (kein Delay, nur setState) für 250ms lang Taste 1 drücken
setStateDelayed("harmony.0.Wohnzimmer.Philips-Fernseher.Number0", 250, 500); // nach 500ms für 250ms Taste 0 drücken
setStateDelayed("harmony.0.Wohnzimmer.Philips-Fernseher.Number1", 250, 800); // nach weiteren 300ms für weitere 250ms Taste 1 drücken
}
// Trigger (wenn Trigger-Variable true)
on(id101, function (obj) {
if (!obj.newState.ack && obj.newState.val) {
log('VIS Button <harmony 101="">gedrückt');
druecke_101(); // Aktion
setState(id101, false); // zurücksetzen
}
});
Ich habe dann in den Eigenschaften des Button die OID "javascript.0.harmony.T101" zugewiesen.
Doch leider tut sich nichts nach dem Betätigen des Button.
Log:
javascript-0 2015-12-31 09:01:21 info script.js.T101: registered 1 subscription and 0 schedules
javascript-0 2015-12-31 09:01:21 info Start javascript script.js.T101
javascript-0 2015-12-31 09:01:21 info Stop script script.js.T101
Gruß</harmony>
-
Hallo,
kriegen wir hin, bei mir klappt es:
! ````
// Variable zum Triggern anlegen
createState('harmony.T101', false, {
name:'Harmony Aktion Tasten 101 drücken',
type: 'boolean',
read: true,
write: true
});
! // in ID packen
var id101 ="javascript.0.harmony.T101"/Harmony Aktion Tasten 101 drücken/; // bitte prüfen, ob das Skript auch in Instanz 0 läuft, sonst anpassen
setState(id101, false, true); // zurücksetzen bei skriptstart
! // Aktion in Funktion gepackt
function druecke_101() {
setState("harmony.0.Wohnzimmer.Philips-Fernseher.Number1", 250); // nach 0s (kein Delay, nur setState) für 250ms lang Taste 1 drücken
setStateDelayed("harmony.0.Wohnzimmer.Philips-Fernseher.Number0", 250, 500); // nach 500ms für 250ms Taste 0 drücken
setStateDelayed("harmony.0.Wohnzimmer.Philips-Fernseher.Number1", 250, 800); // nach weiteren 300ms für weitere 250ms Taste 1 drücken
! setState(id101, false, true); // zurücksetzen
}
! // Trigger (wenn Trigger-Variable true)
on(id101, function (obj) {
if (!obj.newState.ack && obj.newState.val) {
log('VIS Button <harmony 101=""> gedrückt');
druecke_101(); // Aktion
}
});</harmony>Dazu zB dieses Widget:
[{"tpl":"tplJquiButtonState","data":{"oid":"javascript.0.harmony.T101","visibility-cond":"==","visibility-val":1,"buttontext":"101","name":"Taste 101","value":"true","no_style":false},"style":{"left":"267px","top":"23px","z-index":"20"},"widgetSet":"jqui"}]
Wichtig ist, dass die Javascript Variable immer auf 'false' steht. Deshalb die Rückstellung bei Skriptstart. Porbier mal! Gruß, Pix PS: Evtl. mal die javascript.0-Instanz neustarten. Kann es sein, dass die Variable nicht angelegt wurde?
-
Hi Pix,
es geht super und vielen Dank.
Einen guten Rutsch ins Jahr 2015
Gruß