NEWS
Material Design Widgets - Alerts
-
Hallo zusammen,
bin auf das Widget gestoßen und finde es ziemlich cool. Allerdings habe ich große Probleme mit der Ansteuerung.
Dieses Script habe ich gemäß Anleitung in global laufenvar materialDesignWidgets = {}; materialDesignWidgets.sendTo = function (id, text, backgroundColor = '', borderColor = '', icon = '', iconColor = '', fontColor = '') { let json = getState(id).val; if (json) { try { json = JSON.parse(json); } catch (e) { json = []; console.warn('Wert ist kein JSON string! Wert wird ersetzt!'); } } else { json = []; } json.push( { text: text, backgroundColor: backgroundColor, borderColor: borderColor, icon: icon, iconColor: iconColor, fontColor: fontColor } ) setState(id, JSON.stringify(json), true); }
Wenn ich nun mehrfach, den Beispielcode mit meinem eigenen Datenpunkt aufrufe
materialDesignWidgets.sendTo('javascript.0.Stati.Meldungen.Meldung-json2', 'message', 'color');
funktioniert alles wie erwartet - bei jedem Aufruf über Cron-Job wird ein neuer Eintrag erzeugt.
Ich hatte folgende Probleme, die meisten meiner Meldungen sollen nicht über die Schaltfläche im Widget verschwinden, sondern wenn ein Ereignis nicht mehr zutrifft. Dafür habe ich Datenpunkte erzeugt, die ich per Wenn/Dann abfragen kann - so weit so gut.
- Wie kann ich das Widget leer machen - ich habe mir dafür einen Cron erstellt, der 2 Sekunden läuft bevor ein ander Cron den Datenpunkt befüllt - finde ich aber nicht so schick
- Wenn ich nun versuche mehrere Meldungen in den Datenpunkt zu schreiben, wird immer nur der letzte übernommen - Wo habe ich den Fehler gemacht? Ich verstehe das einfach nicht
Hier ein Testscript - sieht aber in meinem Script mit den ganzen Logikabfragen gleich aus
schedule("2,32 * * * * *", function () // jede Minute in Sekunde 2 und 32 { materialDesignWidgets.sendTo('javascript.0.Stati.Meldungen.Meldung-json2', '"Steroanlage länger als 2 Stunden an"', '#FE9A2E', '#FFFFFF', 'battery-alert', '#000000', '#FFFFFF' ); console.warn('STEREOANLAGE ja'); materialDesignWidgets.sendTo('javascript.0.Stati.Meldungen.Meldung-json2', 'Strahler', '#FE9A2E', '#FFFFFF', 'battery-alert', '#000000', '#FFFFFF' ); console.warn('Strahler ja'); materialDesignWidgets.sendTo('javascript.0.Stati.Meldungen.Meldung-json2', 'Es gibt Wetterwarnungen (DWD)', '#FA5858', '#FA5858', 'alert-outline', '#000000', '#FFFFFF' ); console.warn('DWD ja'); materialDesignWidgets.sendTo('javascript.0.Stati.Meldungen.Meldung-json2', 'Es gibt Gefahren (Nina)', '#FA5858', '#FA5858', 'alert-outline', '#000000', '#FFFFFF' ); console.warn('NINA ja'); console.warn(getState("javascript.0.Stati.Meldungen.Meldung-json").val); });
Vielen Dank für euren Support - bin da langsam am verzweifeln!
Grüße
Björn -
@bo_79 Kennst du den schon: https://forum.iobroker.net/topic/29663/material-design-widgets-alerts-widget
-
@Coffeelover
Danke nochmal für den Link, kannte ich schon, habe den Thread aber jetzt nochmal komplett durchgearbeitet :-).
Leider hat das mein Problem nicht gelöst.Da ich unterschiedlichste Status in die Meldungen packen wollte, und diese sich auch bei Statusänderung wieder automatisch entfernen sollten, war mein Gedanke.
Per Cron und 2 Sekunden später per Script wieder befüllen.
Ich habe jetzt herausgefunden, dass mein System das nicht packt wenn ich per Script unmittelbar hintereinander die Meldungen in den Datenpunkt schreibe. Jetzt habe ich pro Meldung ein Cron angelegt mit 2 Sekunden Abstand, das läuft jetzt stabil - ist aber noch keine schöne Lösung, da nun alle zwei Sekunden die Meldungen zugefügt werden.
Leider bin ich nicht so fit in JS, aber man müsste vermutlich eine Variable definieren, die im Script die ganzen Meldungen gemäß den Vorgaben des JSON-String aneinander baut um es am Ende einmalig in den Datenpunkt zu schreiben...Oder hat noch jemand bessere Ideen?
Grüße
Björn