NEWS
Servicemeldungen in vis
-
Beitrag von galferiz » 04.02.2017, 12:32
Homoran hat geschrieben:
…
-
.vis-Widgets
-
javascript (Skripting)
-
javascript-Adapter
Wo hakt es jetzt?
Eine gute Frage `
Aus dem Zusammenhang gerissen
Die Frage bezog sich auf den Text davor
ich bin froh über Feedback, um die Lücken in der Doku zu füllen.
…
Wo hakt es jetzt? `
Nämlich auf die Doku!
Gruß
Rainer
-
-
Jepp - gehört nicht zum Beitrag
-
Nabend Leute,
Ich wollte nur nochmal nachmelden, daß je nach verwendeten Brower oder iOBroker-APP erhält man unterschiedliche Ergebnisse.
Das kann durchaus einer der Gründe sein, warum soviele Leute mal hier mal da Probleme mit Einstellungen haben, die bei anderen Nutzen problemlos funktionieren.
Ich habe derzeit 3 verschiede Lösungenmöglichkeiten entdeckt.
Je nachdem wie man die Widgets -
-
basic String
-
basic HTML
-
basic String (unescapted)
-
Value List HTML Style
befüttert, kommen hier unterschiedliche Ergebnisse heraus.
Dabei sind greift man trotzdem jedesmal den selben Datenpunkt von Pix Script ab.
Ich untersuch das nochmal weiter. Ähnliche Phänomene hab ich auch in Bezug auf iFrames schon bemerkt.
Weis ja nicht, ob dies schonal irgendwo weiter thematisiert worden ist, aber dies Problem dürften zumindestens die Webdesigner unter Euch kennen.
Nicht umsonst gibt es für einige optische Lösungen oft Browser Abfragen im Hintergund, um die richtige Darstellung der Websites zu gewährleisten.
-
-
Hallo,
seit kurzem habe ich folgendes Problem mit dem Script Service-Meldungen.
Folgender Fehler wird angegeben:
Hat jemand anders das selbe Problem, weiß jemand woran es liegen könnte? Von java habe absolut keine Ahnung, das hat eigentlich immer problemlos funktioniert, auch ist mir nicht bewusst etwas wesentliches geändert zu haben, außer Updates.
! 11:54:26.551 [error] javascript.0 script.js.Allgemein.Servicemeldungen: TypeError: Cannot read property 'split' of undefined at count (script.js.Allgemein.Servicemeldungen:45:30) at script.js.Allgemein.Servicemeldungen:64:9 at Object.result.each (C:\Users\Mike Holtgrefe\node_modules\iobroker.javascript\javascript.js:1202:33) at countService (script.js.Allgemein.Servicemeldungen:63:20) at script.js.Allgemein.Servicemeldungen:106:1
Hier das komplette Script, ist aber so aus dem Forum.
/* System Homematic Servicemeldungen Skript erstellt Variablen Service.Homematic.* http://forum.iobroker.org/viewtopic.php?f=21&t=914#p9153 erstellt: 04.08.2015 von paul53 angepasst von pix 05.10.2015 STICKY UNREACH wird jetzt auf true gesetzt und damit gelöscht http://forum.iobroker.org/viewtopic.php?f=21&t=914&p=9200&hilit=sticky#p9173 04.02.2016 Instanz Variable */ instanz = 'javascript.0.'; // Service Meldungen createState('Servicemeldungen.Homematic.Anzahl', 0, { name: 'Homematic Servicemeldungen Anzahl', desc: 'Zahl der Homematic Servicemeldungen', type: 'number' }); createState('Servicemeldungen.Homematic.Text', "", { name: 'Homematic Servicemeldungen Text', desc: 'Liste der Geräte, die Servicemeldungen produzieren', type: 'string' }); var idAnzahl = instanz + 'Servicemeldungen.Homematic.Anzahl', idText = instanz + 'Servicemeldungen.Homematic.Text'; var SelectorUNREACH = $('channel[state.id=*.UNREACH]'); var SelectorSTICKY_UNREACH = $('channel[state.id=*.STICKY_UNREACH]'); var SelectorLOWBAT = $('channel[state.id=*.LOWBAT]'); var SelectorCONFIG_PENDING = $('channel[state.id=*.CONFIG_PENDING]'); function countService(obj) { var anzahl = 0; var text = ""; function count(id) { var status = getState(id).val; // Zustand abfragen (jedes Element) if (status) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt var temptext = getObject(id).common.name; var Geraet = temptext.split(':'); text = text + Geraet[0] + " ==> "; temptext = Geraet[1]; Geraet = temptext.split('.'); text = text + Geraet[1] + " "; ++anzahl; // Zählt die Anzahl der Service-Alarme } } SelectorUNREACH.each(function (id, i) { count(id); }); SelectorSTICKY_UNREACH.each(function (id, i) { var status = getState(id).val; // Zustand abfragen (jedes Element) if (status) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt log('STICKY_UNREACH Meldung: ' + id + ' wurde auf <true> gesetzt. Das Homematic Gerät ist wieder uneingeschränkt erreichbar.'); setState(id, false); // STICKY_UNREACH werden gelöscht } }); SelectorLOWBAT.each(function (id, i) { count(id); }); SelectorCONFIG_PENDING.each(function (id, i) { count(id); }); // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon Service zutreffend) ausgegeben log("Homematic-Servicemeldungen: " + text); log("Anzahl Homematic-Servicemeldungen: " + anzahl); // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert if (!anzahl) { text = "keine Servicemeldungen"; } setState(idText, text); // Schreibt die IDs der Datenpunkte mit Service Meldung setState(idAnzahl, anzahl); // Schreibt die aktuelle Anzahl der Service Meldungen } SelectorUNREACH.on(function(obj) { // bei Zustandänderung *.UNREACH in allen Gewerken countService(obj); }); SelectorSTICKY_UNREACH.on(function(obj) { // bei Zustandänderung *.STICKY_UNREACH in allen Gewerken countService(obj); }); SelectorLOWBAT.on(function(obj) { // bei Zustandänderung *.LOWBAT in allen Gewerken countService(obj); }); SelectorCONFIG_PENDING.on(function(obj) { // bei Zustandänderung *.CONFIG_PENDING in allen Gewerken countService(obj); }); // alternative Abfrage jede Minute schedule("*/15 * * * *", function () { countService(); }); // Ausführung bei Scriptstart countService();</true>
Lg Mike
-
Also ichbin wie von galferiz beschrieben vorgegangen und es funktioniert perfekt
-
Ich bekomme in der Log diverse Warnungsmeldungen angezeigt:````
javascript.0 2017-07-17 06:36:33.088 warn State "hm-rpc.1.CUX9000002.0.LOWBAT" not found
javascript.0 2017-07-17 06:36:33.087 warn State "hm-rpc.1.CUX0200107.0.UNREACH" not found
javascript.0 2017-07-17 06:36:33.087 warn State "hm-rpc.1.CUX0200105.0.UNREACH" not found
javascript.0 2017-07-17 06:36:33.087 warn State "hm-rpc.1.CUX0200101.0.UNREACH" not found
javascript.0 2017-07-17 06:36:33.087 warn State "hm-rpc.1.CUX0200002.0.UNREACH" not foundSuche ich nach den Datenpunkte gibt es diese, allerdings gibt es auf dem darauffolgenden Gerät nicht! Wird aber so nicht angezeigt. BSP: hm-rpc.1.CUX9000002.0.LOWBAT gibt es hm-rpc.1.CUX900****2****001.0.LOWBAT gibt es nicht. ![883_bildschirmfoto_2017-07-17_um_06.44.53.png](/assets/uploads/files/883_bildschirmfoto_2017-07-17_um_06.44.53.png) Ich möchte ungern auf dauen den Log Modus auf Error setzen.
-
Hallo
dieser Beitrag zieht sich ja nun schon über längere Zeit. Nach dem Lesen sehe ich zwar einige Posts weiter oben so eine Art Schritt für Schritt Anleitung. Eine Frage die ich gern vor dem Einrichten beantwortet hätte ist aber noch offen …
Kann ich mit dem Script nur Meldungen anzeigen oder auch quittieren. Eine reine Anzeige nutzt mir nichts.
-
Nur anzeigen
-
@chka: Versuche mal bitte folgendes (so helfe ich mir immer)
-
das Objekt editieren
-
den Schreib-Modus aktivieren
-
als Wert true oder false eintragen
-
den Schreib-Modus wieder deaktivieren
Problem ist nicht das fehlende Objekt, sondern der null-Wert des Objekts.
Allgemein: Das Skript erzeugt nach einem Neustart des Adapters massenhaft events bzgl. "unreachable". Das mag bei 30,40 Geräten noch kein Problem sein; bei mir hängen aber fast 170 HM Geräte an der CCU. Ich bekomme dann immer eine "You are sending too fast" Meldung. Lösung hab ich allerdings auch nicht.
-
-
Wird das nicht beim neu scannen der Geräte wieder überschrieben?
-
hab ich nicht beobachtet
-
ich hab auch das Problem mit den Warmeldungen, dass der State nicht gefunden wurde (erst seit javascript update) Das problem ist nicht der wert Null. Sonder die Abfrage des States der cuxd Geräte. der Unterpunkt 0.XXX Schein einfach nicht da zu sein obwohl er unter Objekte aufgeführt ist. Weiß jemand wie man die die cuxd Geräte von der Abfrage entkoppeln kann? Finde es irgendwie nciht so toll wenn mein gesamter log immer gelb ist
-
Hallo zusammen,
seit einigen Tagen funktioniert das Script bei mir leider nicht mehr (keine Änderung am System - nur Update der Adapter in Iobroker.
Es stehen bei mir immer diesselben Geräte als "unreach" drin, obwohl der Status korrekt ist bzw. es keine Servicemeldungen gibt (oder andere).
Das Log beim Start des Scriptes sieht so aus:
Log 21:43:00.898 [info] javascript.0 Stop script script.js.common.Servicemeldungen 21:43:01.157 [info] javascript.0 Start javascript script.js.common.Servicemeldungen 21:43:01.158 [warn] javascript.0 at count (script.js.common.Servicemeldungen:39:22) 21:43:01.158 [warn] javascript.0 at script.js.common.Servicemeldungen:47:9 21:43:01.158 [warn] javascript.0 at script.js.common.Servicemeldungen:51:22 21:43:01.159 [warn] javascript.0 at count (script.js.common.Servicemeldungen:39:22) 21:43:01.159 [warn] javascript.0 at script.js.common.Servicemeldungen:59:9 21:43:01.159 [info] javascript.0 script.js.common.Servicemeldungen: Homematic-Servicemeldungen: hm-rpc.0.KEQ0509324.0.UNREACH, hm-rpc.0.KEQ0510087.0.UNREACH, hm-rpc.0.KEQ0510208.0.UNREACH, hm-rpc.0.KEQ0576159.0.UNREACH, hm-rpc.0.KEQ1039611.0.UNREACH, hm-rpc.0.LEQ0420281.0.UNREACH, hm-rpc.0.NEQ1662995.0.UNREACH, 21:43:01.160 [info] javascript.0 script.js.common.Servicemeldungen: Anzahl Homematic-Servicemeldungen: 7 21:43:01.160 [info] javascript.0 script.js.common.Servicemeldungen: registered 455 subscriptions and 1 schedule
Kann mir jemand einen Tip geben, woran das liegen könnte?
Ich nutze das Script hier aus dem Thread und es hat bislang problemlos funktioniert.
/* System Homematic Servicemeldungen Skript erstellt Variablen Service.Homematic.* http://forum.iobroker.org/viewtopic.php?f=21&t=914#p9153 erstellt: 04.08.2015 von paul53 angepasst von pix 05.10.2015 STICKY UNREACH wird jetzt auf true gesetzt und damit gelöscht http://forum.iobroker.org/viewtopic.php?f=21&t=914&p=9200&hilit=sticky#p9173 04.02.2016 Instanz Variable */ instanz = 'javascript.0.'; // Service Meldungen createState('Servicemeldungen.Homematic.Anzahl', 0, { name: 'Homematic Servicemeldungen Anzahl', desc: 'Zahl der Homematic Servicemeldungen', type: 'number' }); createState('Servicemeldungen.Homematic.Text', "", { name: 'Homematic Servicemeldungen Text', desc: 'Liste der Geräte, die Servicemeldungen produzieren', type: 'string' }); var idAnzahl = instanz + 'Servicemeldungen.Homematic.Anzahl', idText = instanz + 'Servicemeldungen.Homematic.Text'; var SelectorUNREACH = $('channel[state.id=*.UNREACH]'); var SelectorSTICKY_UNREACH = $('channel[state.id=*.STICKY_UNREACH]'); var SelectorLOWBAT = $('channel[state.id=*.LOWBAT]'); var SelectorCONFIG_PENDING = $('channel[state.id=*.CONFIG_PENDING]'); function countService(obj) { var anzahl = 0; var text = ""; function count(id) { var status = getState(id).val; // Zustand abfragen (jedes Element) if (status) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt text = text + id + ", "; // Zu String hinzufügen ++anzahl; // Zählt die Anzahl der Service-Alarme } } SelectorUNREACH.each(function (id, i) { count(id); }); SelectorSTICKY_UNREACH.each(function (id, i) { var status = getState(id).val; // Zustand abfragen (jedes Element) if (status) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt log('STICKY_UNREACH Meldung: ' + id + ' wurde auf <true> gesetzt. Das Homematic Gerät ist wieder uneingeschränkt erreichbar.'); setState(id, false); // STICKY_UNREACH werden gelöscht } }); SelectorLOWBAT.each(function (id, i) { count(id); }); SelectorCONFIG_PENDING.each(function (id, i) { count(id); }); // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon Service zutreffend) ausgegeben log("Homematic-Servicemeldungen: " + text); log("Anzahl Homematic-Servicemeldungen: " + anzahl); // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert if (!anzahl) { text = "keine Servicemeldungen"; } setState(idText, text); // Schreibt die IDs der Datenpunkte mit Service Meldung setState(idAnzahl, anzahl); // Schreibt die aktuelle Anzahl der Service Meldungen } SelectorUNREACH.on(function(obj) { // bei Zustandänderung *.UNREACH in allen Gewerken countService(obj); }); SelectorSTICKY_UNREACH.on(function(obj) { // bei Zustandänderung *.STICKY_UNREACH in allen Gewerken countService(obj); }); SelectorLOWBAT.on(function(obj) { // bei Zustandänderung *.LOWBAT in allen Gewerken countService(obj); }); SelectorCONFIG_PENDING.on(function(obj) { // bei Zustandänderung *.CONFIG_PENDING in allen Gewerken countService(obj); }); // alternative Abfrage jede Minute schedule("*/15 * * * *", function () { countService(); }); // Ausführung bei Scriptstart countService();</true>
Oder ist das ein allgemeiner Fehler?
Danke im Voraus
Frank
-
Hallo nochmals,
ist wirklich keiner da, der mir hier evtl. weiterhelfen kann und bin ich der einzige, bei dem dieses Problem besteht?
Im Übrigen zeigt es bei mir auch seit längerem schon nur noch die Seriennummer des Gerätes an und keine ID (Name) mehr.
Und somit weiß ich natürlich nie, welches Gerät gerade nicht erreichbar ist etc…
Wäre toll, wenn mir jemand nen Tipp hat, wo ich da nach dem Fehler suchen könnte...
Vielen Dank und schöne Weihnachten
Frank
-
unreach: schau mal in die Objekte und setze für die betroffenen Geräte den "STICKY_UNREACH" Status auf "false".
ID anstatt Name:
Ändere in````
function count(id)die Zeile
text = text + id + ",
";gegen
text = text + getObject(id).common.name+ ",
"; -
Noch ein Variante mit geringfügigen Änderungen,
1. Ausgabe für Telegram formatiert
2. Statt der ID werden die Namen der Homematic Geräte ausgegeben
3. Abfrage des Konfigurationsstatus und des Stick_Unreach Bits habe ich weggelassen, weil für mich nicht so relevant.
instanz = 'javascript.0.'; var idAnzahl = instanz + 'Servicemeldungen.Homematic.Anzahl', idText = instanz + 'Servicemeldungen.Homematic.Text'; createState(idAnzahl, 0, { name: 'Homematic Servicemeldungen Anzahl', desc: 'Zahl der Homematic Servicemeldungen', type: 'number' }); createState(idText, "", { name: 'Homematic Servicemeldungen Text', desc: 'Liste der Geräte, die Servicemeldungen produzieren', type: 'string' }); var SelectorUNREACH = $('channel[state.id=*.UNREACH]'); var SelectorLOWBAT = $('channel[state.id=*.LOWBAT]'); function countService(obj) { var anzahl = 0; var text = ""; var delimiter = ""; // Klartext Name ermitteln function getname(id) { var tokens = []; var object = getObject(id); tokens = object.common.name.split(":"); return tokens[0]; } function count(id,cause) { var status = getState(id).val; if (status) { text = text + delimiter + getname(id) + " " + cause + " " ; delimiter = "\n"; // Neue Zeile für Telegram ++anzahl; } } SelectorUNREACH.each(function (id, i) {count(id,"ist nicht erreichbar");}); SelectorLOWBAT.each(function (id, i) {count(id,"hat schwache Batterie");}); if (!anzahl) text = "keine Servicemeldungen"; log("Homematic-Servicemeldungen: " + text); //log("Anzahl Homematic-Servicemeldungen: " + anzahl); setState(idText, text); setState(idAnzahl, anzahl); setState('telegram.0.communicate.response', text); } countService(); SelectorUNREACH.on(function(obj) {countService(obj);}); SelectorLOWBAT.on(function(obj) {countService(obj);});
-
Hallo zusammen,
würde gerne zu den Service Meldungen auch noch einige Meldungen anzeigen lassen.
Im Moment habe ich für jede Meldung ein eigenes Feld in VIS, dass dann entspr. angezeigt wird, wenn es akut ist.
Das kostet aber viel Platz, da für jede Meldung ein eigener Platz reserviert wird.
Besser wäre es eben das mit den Servicemeldungen zu verbinden, die dann entsprechend von oben beginnen nach unten rutschen.
Eigene Meldungen wären z.B. Wasser zu kalt/heiß, Luftfeuchtigkeit zu hoch, Fenster geschlossen halt, etc. D.h. ich lasse etwas anzeigen, wenn ein Wert unter/überschritten wird.
Wäre cool, wenn man das irgendwie mit einbinden könnte.
Danke für Tipps
-
-
Multi Ereignis ist nicht das richtige, da hier die Servicemeldungen meines Wissens fehlen würde.
Ich habe die eigenen Meldungen als Alarmmeldung nun in der CCU2. Wie bekomme ich das zusammen mit den Servicemeldungen angezeigt?
-
Hallo nochmal,
es geht noch einmal darum Alarmmeldungen ebenso anzuzeigen.
Im Grunde genommen also alles was mit "Alarm_" beginnt und state.enabled auf "true" steht als Text eintragen.
var SelectorALARM = …...................
Keine Ahnung was ich da eintragen muss.