NEWS
Ereignisliste erzeugen
-
so jetzt kommt mal eine Fehlermeldung.
javascript.0 2016-12-27 12:08:11.635 warn State "javascript.0.Ereignisliste.event" not found
diesen Punkt habe ich auch nicht.
Unter Objekte ist nur der Ordner: javascript.0.Ereignisliste mit dem Inhalt javascript.0.Ereignisliste.eventlist und javascript.0.Ereignisliste.eventlistArr
-
Habe den Datenpunkt jetzt mal angelegt. Werde jetzt mal kuz testen.
-
Wenn ich den Einzeiler starte. Überträgt er den event.
Wird dann in in event und eventlist und eventlistArr dargestellt.
Ich habe in das große Script die Zeile: createState(idEvent ,""); hinzugefügt.
Wenn ich STATE unter Zustände änder löst es auch nicht aus.
-
Also mit dem Einzeiler klappt das super.
Wir schön in der eventlist dokumentiert.
` > on({id:'hm-rpc.0.LEQXXXXX91.1.STATE/Licht Wohnzimmer/',change:'ne'}, function (obj) {
if (obj.state.val) {
event("Licht Wohnzimmer");
}
}); `
Habe das Script auf den Lichtschalter geändert. Geht aber auch nicht.
Ist das wirklich richtig so?
-
Also mit dem Einzeiler klappt das super.
Wir schön in der eventlist dokumentiert.
` > on({id:'hm-rpc.0.LEQXXXXX91.1.STATE/Licht Wohnzimmer/',change:'ne'}, function (obj) {
if (obj.state.val) {
event("Licht Wohnzimmer");
}
}); `
Habe das Script auf den Lichtschalter geändert. Geht aber auch nicht.
Ist das wirklich richtig so? `
Nach etwas probieren habe ich jetzt dieses Script geschrieben.
Damit geht es. Dann liegt das an dem Testscript.
Was ist denn der Unterschied zwischen den beiden? obj? dp?
` > var idWohnzimmerlampe = "hm-rpc.0.LEQ0XXXX91.1.STATE"/Wohnzimmer/;
on(idWohnzimmerlampe, function (dp) { // bei Änderung auslösen
if(!dp.state.val);{
sendTo("pushover", " Licht an");
event("Wohnzimmer Licht an");
}
}); `
Wie muss ich es schreiben damit mir nur eine Nachricht gesendet wir wenn der Status auf false geändert wird?
-
dp oder obj sind nur Variablennamen, die Du festlegst. Da könnte auch xyz drin stehen.
Wenn Du in Deinem funktionierendem Skript die beiden dp in obj änderst, wird es auch funktionieren.
dp verwenden manche als Abkürzung für Datenpunkt.
obj verwenden manche als Abkürzung für Objekt.
In diese Variable wird das JSON Objekt des Datenpunkts geschrieben.
Eigentlich müsstest Du mit Deine Skript nur eine Nachricht erhalten, wenn der Zustand sich auf false ändert, durch diese Zeile:
if(!dp.state.val);{
Durch das Ausrufezeichen vor dp.state.val wird das if nur ausgeführt, wenn der Inhalt false ist, das ds Ausrufezeichen für not steht.
not false = true.
-
Also egal ab das Ausrufezeichen da oder nicht da ist, ich bekomme immer zwei Nachrichten.
Wie muss das denn umgeschrieben werde das ich nur eine erhalte?
-
Sollte eigentlich funktionieren.
Ein Fehler ist bei Dir noch drin:
if(!dp.state.val);{
Das Semikolon zwischen Klammer zu und geschweifter Klammer auf gehört da nicht hin.
-
Also jetzt funktioniert es. es lag wirklich an dem Semikolon.
Klasse und danke.
-
Hi Ihr,
Ich komme leider nicht weiter. Hänge nun schon 1 Monat damit rum und komme zu nix.
Bitte habt Rücksicht, Ich versuche mich neu in Java.
Also Ich habe schon so viel versucht aber nix geht.
Also Ich habe folgendes bis dato gemacht,versucht und hin bekommen
Habe Das Globale Script ( #34 ) mit dem create Event unter scripte im global unter ereignis abgespeichert.
! // Erstellt eine Ereignisliste mit 50 Einträgen
! //==============================================
! var eventsLength = 50; // maximale Anzahl von Ereignissen
! var idEventList = "Ereignisliste.eventlistArr"; // Hier wird die Lsite als Array angelegt
! var idEventListStr = "Ereignisliste.eventlist"; // Die Liste als String mit
für VIS
! var idEvent = "javascript.0.Ereignisliste.event"/Aktueller Event/; // überwachter Datenpunkt
! // Events werden mit der globalen Funktion
! // event() als Text in die ID: idEvent geschrieben
! // neue Texte dort werden von diesem Skript verarbeitet
! // –---------------------------------------------------------------------------
! // Datenpunkt für die Eventliste anlegen
! createState(idEventList ,formatDate(new Date(), 'DD.MM. hh:mm') + ' Datenpunkt angelegt');
! createState(idEventListStr ,"");
! createState(idEvent ,"");
! function readListEvent(id) { // lese ein JSON aus einem Datenpunkt
! var list;
! try {
! list = JSON.parse(getState(id).val);
! } catch (ex) {
! list = [];
! }
! if(!list) list = [];
! return list;
! }
! function writeListEvent(list,id) { // schreibt ein JSON in einen Datenpunkt
! setState(id, JSON.stringify(list));
! }
! function getEventsList(events) {
! var text = '';
! for (var i = 0; i < events.length; i++) {
! text += (text ? '
\n' : '') + events__;
! }
! return text;
! }
! // Ereignis schreiben
! function writeEvent(text) {
! var events = readListEvent(idEventList); // list die Liste aus einem Datenpunkt
! events.unshift(formatDate(new Date(), 'DD.MM. hh:mm ') + text); // fügt den Text als Event am Anfag der Liste ien
! if (events.length > eventsLength) events.pop(); // kürzt die Liste hinten, wenn die maximale Länge erreicht ist
! writeListEvent(events, idEventList); // schreibt die Liste in den Datenpunkt zurück
! setState(idEventListStr,getEventsList(events)); // erzeugt aus dem Array den String mit
für neue Zeilen
! }
! // –---------------------------------------------------------------------------
! on({id:idEvent,change:'any'}, function (obj) { // wenn ein neuer Event geschrieben wird
! //if (!obj.newState.ack && obj.newState.val) {
! log("neuer Event zum verarbeiten: " + obj.state.val);
! writeEvent(obj.state.val);
! //}
! });
! // --------------- Script start ---------------- #### Script Start ####
! function main() {
! log("Ereignisliste: Skript gestartet");
! }
! setTimeout(main, 500);
! event("Ereignis Skript wurde gestartet");__ __Den ein-zeiler das sie starten bekomme ich angezeigt " event("Event Text Skript wurde gestartet"); "Jedoch wenn ich einfach nur versuche Steckdose und objekte zu starten, geht nix er schaltet auf true und false bei den geräten,
mehr aber auch nicht. es gibt keinen eintrag nix.
folgendes habe ich z.b. aus probiert_
! var idWohnzimmerlampe = "zwave.0.NODE4.SWITCH_BINARY.Switch_1.state"/Wohnzimmer/;
! on(idWohnzimmerlampe, function (dp) { // bei Änderung auslösen
! if(!dp.state.val){
! sendTo("pushover", " Licht an");
! event("Wohnzimmer Licht an");
! }
! });! on({id:'zwave.0.NODE4.SWITCH_BINARY.Switch_1.STATE/FK Balkontür/',change:'ne'}, function (obj) {
! if (obj.state.val) {
! event("Balkontür geöffnet");
! }
! }); _Sieht da jemand etwas das ich falsch mache ?Hab auch schon versucht das in Blockly zu integrieren, aber weigert sich auch da
Ich bekomme leider keine Änderung . nur den status beim neu starten der scripte mit zeit
Ich hoffe da kann mir jemand meine Gehirn zellen an kurbeln
Zur Info : Die Liste soll später in Vis über Laufschrift integriert werden__
-
auf dem Handy sehe ich das nicht richtig
das globale Skript ist nur ein Vierzeiler mit der Funktion event()
das was Du als globales Skript gepostet hast gehört nicht inter global
Gesendet von iPhone mit Tapatalk
-
ne hab nur das große im global, für die kleinen habe ich einen Ordner Tests erstellt
Lg
-
Das ist das globale Skript:
function event(text) { setState("javascript.0.Ereignisliste.event",text); }
-
Hm Ok dummheit ein bisschen zur Seite geschoben.
wenn ich event("test gestartet"); egal wohin als einzeiler dazu schreibe, ändert er der Wert von eventlist.
Leider reagiert er nicht auf die geräte
-
wenn ich event("test gestartet"); egal wohin als einzeiler dazu schreibe, ändert er der Wert von eventlist. `
Verstehe ich das richtig. Die Liste funktioniert und wird jeweils um eine Zeile ergänzt?
> Leider reagiert er nicht auf die geräte
Du meinst z.B. bei Deinem Skript hier?:
! ````
var idWohnzimmerlampe = "zwave.0.NODE4.SWITCH_BINARY.Switch_1.state"/Wohnzimmer/;
! on(idWohnzimmerlampe, function (dp) { // bei Änderung auslösen
if(!dp.state.val){
sendTo("pushover", " Licht an");
event("Wohnzimmer Licht an");
}
});Funktioniert denn dann pushover? Nimm bei Deinen Tests am Besten immer noch ein log() dazu, um zu sehen, dass Deine Abfrage generell richtig ist.
-
Nein leider auch nicht. es wird nur ein Eintrag gesetzt und immer wieder überschrieben.
aber auch immer nur bei eventlist, bei eventlistarr wird nur der erste datenpunkt bei der erstellung / erst start des ordners gesetzt.
also auch keine Liste.
Hab mal nen foto angehangen
1812_ausschnitt.jpg -
Bei Dir fehlt ein Datenpunkt.
Der Datenpunkt javascript.0.Ereignisliste.event wird vom nicht globalen Skript überwacht. Alles was dort rein geschrieben wird, wird mit Datum in der Ereignisliste ergänzt. Dieser Datenpunkt fehlt bei Dir
<u>Globales Skript mit der Funktion event(text)</u>
Die globale Funktion event() macht nichts anderes, als den Text in diesen Datenpunkt zu schreiben.
<u>Das nicht globale SKript Ereignisliste</u>
Das nicht globale Skript über wacht den Datenpunkt javascript.0.Ereignisliste.event, ergänzt den Datenpunkt eventlistarr und erzeugt aus diesem Array dann die Liste. Das Array wird in einem Datenpunkt gespeichert, damit die Ereignisse auch nach einem Neustart (ioBroker oder Javascript-Adapter oder Skript) noch vorhanden sind.
Ich blicke zwar nciht ganz durch, welches Skript Du nun verwendest.
So oder so fehlt Dir ein Datenpunkt.
-
AHHHRgh man ich glaube ich brauch Hilfe
Ok Alsooooo, Habe den Datenpunkt erstellt.
Und wenn ich den event jetzt testweise in true umsetze, wird sofort ein eintrag definiert / ein Zeitstempel mit True und das jedesmal.
Scheint also zu funktionieren, aber warum reagiert er nicht auf das script ? damit schalte ich nur einen schalter welcher auch den zustand ändert
-
true? Hast Du ein boolean Objekt erstellt?
Eigentlich ist der Datenpunkt ein String für Text.
Welches Skript?
Das weiter oben? Funktioniert denn dort Pushover?
Mal ein log() hinzugefügt?
-
Also scheinbar scheint er nicht auf den Schalter zu reagieren. er schaltet und beim neustart zeigt er auch alles an. nur nicht wenn ich schalte. scheinbar stimmt was mit der zeile nicht. die liste funktioniert scheinbar. kann auch über blockly einen eintrag hinzu fügen aber das soll ja eigentlich nicht.
! on({id:"zwave.0.NODE4.SWITCH_BINARY.Switch_1.state",change:'any'}, function (obj) {
! if (!obj.newState.ack && obj.newState.val) {
! log("neuer Event zum verarbeiten: " + obj.state.val);
! writeEvent(obj.state.val);
! }
! });