NEWS
[Skript] Absolute Feuchte berechnen
-
Du baust dir im Hintergrund also die JSON Tabelle über ein Skript zusammen und verweist dann darauf über die Object ID des Table Widgets?
-
nö…
primitiver
Ich habe ein Skript laufen, in dem für Kategorien Schwellwerte eingestellt sind, z.B. für die Raumtemperatur:
! ````
var liste = {
"raumKlimaTemperatur": {
"obereGrenzeBezeichnung": "sehr heiss",
"obereGrenzeZahl": 4,
"ogColor": "white",
"ogBackgroundColor": "red",
"schwellwerte": [
{"wert": 15,
"bezeichnung": "kalt",
"zahl": -2,
"color": "white",
"backgroundColor": "dodgerblue"
},
{"wert": 18,
"bezeichnung": "kühl",
"zahl": -1,
"color": "black",
"backgroundColor": "deepskyblue"
},
{"wert": 22,
"bezeichnung": "normal",
"zahl": 0,
"color": "black",
"backgroundColor": "lime"
! },
{"wert": 24,
"bezeichnung": "warm",
"zahl": 1,
"color": "black",
"backgroundColor": "limegreen"
! },
{"wert": 26,
"bezeichnung": "warm",
"zahl": 2,
"color": "black",
"backgroundColor": "orange"
! },
{"wert": 30,
"bezeichnung": "sehr warm",
"zahl": 3,
"color": "white",
"backgroundColor": "orangered"
}
]
},...
Dann gibt es ein zweites JSON, in dem die gewünschten Datenpunkten einer Kategorie zugeordnet werden. Für jeden überwachte Datenpunkt werden dann mehrere Datenpunkte angelegt, die automatisch gefüllt werden, mit einem Text, einer Schriftfarbe, einer Hintergrundfarbe und einer Zahl, die alternativ in Widgets verwendet werden kann. Diese Datenpunkte wiederum werden dann bei den "normalen" Widgets eingetragen. Z.B. bei der Hintergrundfarbe als: {javascript.0.Schwellwerte.Klima.Temperatur.Gästebad.backgroundColor} Ist eine ziemliche Fleissarbeit. Das Justgage Widget kann da einfacher genutzt werden. ![327_objekt_schwellwerte.jpg](/assets/uploads/files/327_objekt_schwellwerte.jpg) Dr Vorteil ist allerdings, dass man in den Schwellwerten eine Änderung vornehmen kann und diese automatisch bei allen Widgets auf allen Seiten übernommen wird. SO macht man die Arbeit einmal und kann hinterher das Gesamtbild anpassen, ohne in den VIS-Editor zu müssen.
-
Also ist das Ding eigentlich kein Tabellen-Widget sondern einzelne HTML-Widgets?
-
Genau.
-
Danke für deine Rückmeldungen, ist ein guter Lösungsweg!
-
Genau. `
Wärst du bereit all deine Skript mal komplett inkl. der für VIS aufbereiteten Form zur Verfügung zu stellen? Das wäre echt super.
-
Wärst du bereit all deine Skript mal komplett inkl. der für VIS aufbereiteten Form zur Verfügung zu stellen? Das wäre echt super. `
Klar.
Ist aber nichts Dolles und ausserdem viel Fleissarbeit. Ob sich das sonst noch jemand antun möchte…
Das Schwellwerte-Skript:
(legt für vorhandene Datenpunkt zusätzliche Datenpunkte für Formatierung, Einordnung, usw. an)
! ```
// todo: onAnlegen() Funktion in Funktion ! var loglevel = "warn"; // Loglevel des Scriptes (debug,info,warn,error) - benutzt die Funktion logs() ! var pfad = "Schwellwerte."; ! // ----------------------------------------------------------------------------- // Datenpunkte, für die Schwellwerte angelegt werden sollen // ----------------------------------------------------------------------------- ! // datenpunkt: Name des Datenpunkt für die Schwellwerte // liste: Verweis auf die entspechende Schwellwerteliste in diesem Script ! var schwellwerte = { "hm-rpc.0.LEQ0999999.2.POWER" : { "datenpunkt": "Strom.Fernsehecke", "liste": "wattFernsehecke" }, "hm-rpc.0.LEQ9999999.2.POWER"/*Leistungsmessung USV Arbeitszimmer 1.POWER*/ : { "datenpunkt": "Strom.USV", "liste": "wattUSV" }, "hm-rpc.0.LEQ9999999.2.POWER"/*Leistungsmesser rot 1.POWER*/ : { "datenpunkt": "Strom.esxi", "liste": "wattEsxi" }, "hm-rpc.0.LEQ9999999.2.ACTUAL_TEMPERATURE"/*Arbeitszimmer Temperature*/ : { "datenpunkt": "Klima.Temperatur.Arbeitszimmer", "liste": "raumKlimaTemperatur" }, "hm-rpc.0.KEQ9999999.1.TEMPERATURE"/*Katharina Klima.TEMPERATURE*/ : { "datenpunkt": "Klima.Temperatur.Katharina", "liste": "raumKlimaTemperatur" }, "hm-rpc.0.KEQ0999999.1.TEMPERATURE"/*Flur:1.TEMPERATURE*/ : { "datenpunkt": "Klima.Temperatur.Flur", "liste": "raumKlimaTemperatur" }, "hm-rpc.0.KEQ0999999.1.TEMPERATURE"/*Wohnzimmer Klima.TEMPERATURE*/ : { "datenpunkt": "Klima.Temperatur.Wohnzimmer", "liste": "raumKlimaTemperatur" }, "hm-rpc.0.GEQ9999999.1.TEMPERATURE"/*Schlafzimmer Klima:1.TEMPERATURE*/ : { "datenpunkt": "Klima.Temperatur.Schlafzimmer", "liste": "raumKlimaTemperatur" }, "hm-rpc.0.GEQ0999999.1.TEMPERATURE"/*Gästebad Klima:1.TEMPERATURE*/ : { "datenpunkt": "Klima.Temperatur.Gästebad", "liste": "raumKlimaTemperatur" }, "hm-rpc.0.KEQ0999999.1.TEMPERATURE"/*Bad Lana.TEMPERATURE*/ : { "datenpunkt": "Klima.Temperatur.Bad", "liste": "raumKlimaTemperatur" }, "hm-rpc.0.KEQ0999999.1.HUMIDITY"/*Bad Lana.HUMIDITY*/ : { "datenpunkt": "Klima.Luftfeuchtigkeit.Bad", "liste": "raumKlimaLuftfeuchtigkeit" }, "hm-rpc.0.GEQ0999999.1.HUMIDITY"/*Gästebad Klima:1.HUMIDITY*/ : { "datenpunkt": "Klima.Luftfeuchtigkeit.Gästebad", "liste": "raumKlimaLuftfeuchtigkeit" }, "hm-rpc.0.GEQ0999999.1.HUMIDITY"/*Schlafzimmer Klima:1.HUMIDITY*/ : { "datenpunkt": "Klima.Luftfeuchtigkeit.Schlafzimmer", "liste": "raumKlimaLuftfeuchtigkeit" }, "hm-rpc.0.KEQ0999999.1.HUMIDITY"/*Wohnzimmer Klima.HUMIDITY*/ : { "datenpunkt": "Klima.Luftfeuchtigkeit.Wohnzimmer", "liste": "raumKlimaLuftfeuchtigkeit" }, "hm-rpc.0.KEQ0199999.1.HUMIDITY"/*Flur:1.HUMIDITY*/ : { "datenpunkt": "Klima.Luftfeuchtigkeit.Flur", "liste": "raumKlimaLuftfeuchtigkeit" }, "hm-rpc.0.KEQ0999999.1.HUMIDITY"/*Katharina Klima.HUMIDITY*/ : { "datenpunkt": "Klima.Luftfeuchtigkeit.Katharina", "liste": "raumKlimaLuftfeuchtigkeit" }, "hm-rpc.0.LEQ1999999.1.HUMIDITY"/*Arbeitszimmer Thermostat.HUMIDITY*/ : { "datenpunkt": "Klima.Luftfeuchtigkeit.Arbeitszimmer", "liste": "raumKlimaLuftfeuchtigkeit" }, "hm-rpc.0.FEQ0099999.1.TEMPERATURE"/*Balkon gr. Klima:1.TEMPERATURE*/ : { "datenpunkt": "Klima.Temperatur.Balkon", "liste": "draussenKlimaTemperatur" }, "yr.0.forecast.day0.temperature_actual"/*Actual temperature*/ : { "datenpunkt": "Klima.Temperatur.yrActual", "liste": "draussenKlimaTemperatur" }, "weatherunderground.0.current.temp_c" : { "datenpunkt": "Klima.Temperatur.wugActual", "liste": "draussenKlimaTemperatur" }, "yr.0.forecast.day0.temperature_max"/*Max temperature*/ : { "datenpunkt": "Klima.Temperatur.yrMax", "liste": "draussenKlimaTemperatur" }, "yr.0.forecast.day0.temperature_min"/*Min temperature*/ : { "datenpunkt": "Klima.Temperatur.yrMin", "liste": "draussenKlimaTemperatur" }, "sonos.0.root.172_16_130_184.volume"/*volume*/ : { "datenpunkt": "Sonos.Lautstärke.Wohnzimmer", "liste": "sonosVol" }, "sonos.0.root.172_16_130_169.volume"/*volume*/ : { "datenpunkt": "Sonos.Lautstärke.Schlafzimmer", "liste": "sonosVol" }, "sonos.0.root.172_16_130_149.volume"/*volume*/ : { "datenpunkt": "Sonos.Lautstärke.Micha", "liste": "sonosVol" }, "sonos.0.root.172_16_199_146.volume"/*volume*/ : { "datenpunkt": "Sonos.Lautstärke.Mobil", "liste": "sonosVol" }, "yr.0.forecast.day0.wind_speed"/*Forecast for wind speed for today*/ : { "datenpunkt": "Klima.Windstaerke.yrWindSpeed", "liste": "windstaerke" }, "javascript.0.Synology.MemUsedPercent"/*Diskstation verwendeter HD-Speicher in Prozent*/ : { "datenpunkt": "Diskstation.freierHDSpeicher", "liste": "hdFreiProzent" }, "weatherunderground.0.current.UV"/*UV-Index*/ : { "datenpunkt": "Klima.UV_Index", "liste": "uv-index" }, "javascript.1.Systeminfos.host.updates.Updates_verfügbar"/*Ubuntu Updates verfügbar*/ : { "datenpunkt": "update.ubuntu_server", "liste": "updates" }, "javascript.1.Systeminfos.host.updates.Security_Updates"/*Ubuntu Securtity Updates verfügbar*/ : { "datenpunkt": "update.ubuntu_server_security", "liste": "updates" }, "javascript.1.Systeminfos.mySQL.updates.Updates_verfügbar"/*Ubuntu Updates verfügbar*/ : { "datenpunkt": "update.mySQL_server", "liste": "updates" }, "javascript.1.Systeminfos.mySQL.updates.Security_Updates"/*Ubuntu Securtity Updates verfügbar*/ : { "datenpunkt": "update.mySQL_server_security", "liste": "updates" }, "admin.0.info.updatesNumber"/*Number of adapters to update*/ : { "datenpunkt": "update.iobroker", "liste": "updates" }, "hm-rega.0.maintenance"/*Servicemeldungen*/ : { "datenpunkt": "ccu.servicemeldugen", "liste": "updates" }, "hm-rega.0.alarms"/*Alarmmeldungen*/ : { "datenpunkt": "ccu.alarme", "liste": "alarme" }, "javascript.0.zählen.Lowbat.anzahlLOWBAT"/*zählen.Lowbat.anzahlLOWBAT*/ : { "datenpunkt": "ccu.LOWBAT", "liste": "updates" }, "javascript.0.zählen.UNREACH.anzahlUNREACH"/*zählen.UNREACH.anzahlUNREACH*/ : { "datenpunkt": "ccu.UNREACH", "liste": "updates" }, "javascript.1.Systeminfos.host.Load_Average.load_average_01_min"/*mittlere Systemauslastung in der letzten Minute*/ : { "datenpunkt": "load_average.iobtoker_host_01m", "liste": "load2core" }, "javascript.1.Systeminfos.host.Load_Average.load_average_05_min" : { "datenpunkt": "load_average.iobtoker_host_05m", "liste": "load2core" }, "javascript.1.Systeminfos.host.Load_Average.load_average_15_min" : { "datenpunkt": "load_average.iobtoker_host_15m", "liste": "load2core" }, "javascript.1.Systeminfos.host.HD.HD_4_verwendet"/*verwendeter Festplattenspeicher in %*/ : { "datenpunkt": "host.freierHDSpeicher", "liste": "hdFreiProzent" }, "javascript.1.Systeminfos.mySQL.Load_Average.load_average_01_min"/*mittlere Systemauslastung in der letzten Minute*/ : { "datenpunkt": "load_average.mySQL_01m", "liste": "load2core" }, "javascript.1.Systeminfos.mySQL.Load_Average.load_average_05_min" : { "datenpunkt": "load_average.mySQL_05m", "liste": "load2core" }, "javascript.1.Systeminfos.mySQL.Load_Average.load_average_15_min" : { "datenpunkt": "load_average.mySQL_15m", "liste": "load2core" }, "javascript.1.Systeminfos.mySQL.HD.HD_4_verwendet"/*verwendeter Festplattenspeicher in %*/ : { "datenpunkt": "mySQL.freierHDSpeicher", "liste": "hdFreiProzent" }, "javascript.1.Systeminfos.CCU.Load_Average.load_average_01_min"/*mittlere Systemauslastung in der letzten Minute*/ : { "datenpunkt": "load_average.ccu_01m", "liste": "load1core" }, "javascript.1.Systeminfos.CCU.Load_Average.load_average_05_min" : { "datenpunkt": "load_average.ccu_05m", "liste": "load1core" }, "javascript.1.Systeminfos.CCU.Load_Average.load_average_15_min" : { "datenpunkt": "load_average.ccu_15m", "liste": "load1core" }, "javascript.1.Systeminfos.hue.Lights_Update_Anzahl"/*Anzahl hue Lights mit Update*/ : { "datenpunkt": "hue.lights_update", "liste": "gruenGelb" }, "javascript.1.Systeminfos.hue.Sensors_Update_Anzahl"/*Anzahl hue Senosrs mit Update*/ : { "datenpunkt": "hue.sensors_update", "liste": "gruenGelb" }, "system.host.ubuntu1604server.load"/*Load Average 1min*/ : { "datenpunkt": "load_average.iobroker_admin_host_01m", "liste": "load2core" } }; ! //load2core ! // ----------------------------------------------------------------------------- // Schwellwertelisten // ----------------------------------------------------------------------------- ! var liste = { "raumKlimaTemperatur": { "obereGrenzeBezeichnung": "sehr heiss", "obereGrenzeZahl": 4, "ogColor": "white", "ogBackgroundColor": "red", "schwellwerte": [ {"wert": 15, "bezeichnung": "kalt", "zahl": -2, "color": "white", "backgroundColor": "dodgerblue" }, {"wert": 18, "bezeichnung": "kühl", "zahl": -1, "color": "black", "backgroundColor": "deepskyblue" }, {"wert": 22, "bezeichnung": "normal", "zahl": 0, "color": "black", "backgroundColor": "lime" ! }, {"wert": 24, "bezeichnung": "warm", "zahl": 1, "color": "black", "backgroundColor": "limegreen" ! }, {"wert": 26, "bezeichnung": "warm", "zahl": 2, "color": "black", "backgroundColor": "orange" ! }, {"wert": 30, "bezeichnung": "sehr warm", "zahl": 3, "color": "white", "backgroundColor": "orangered" } ] }, "raumKlimaLuftfeuchtigkeit": { "obereGrenzeBezeichnung": "Schimmel", "obereGrenzeZahl": 3, "ogColor": "white", "ogBackgroundColor": "dodgerblue", "schwellwerte": [ {"wert": 37, "bezeichnung": "trocken", "zahl": -1, "color": "black", "backgroundColor": "orange" }, {"wert": 60, "bezeichnung": "normal", "zahl": 0, "color": "black", "backgroundColor": "lime" }, {"wert": 70, "bezeichnung": "feucht", "zahl": 1, "color": "black", "backgroundColor": "deepskyblue" ! } ] }, "draussenKlimaTemperatur": { "obereGrenzeBezeichnung": "sehr heiss", "obereGrenzeZahl": 3, "ogColor": "white", "ogBackgroundColor": "orangered", "schwellwerte": [ {"wert": 0, "bezeichnung": "eisig", "zahl": -2, "color": "white", "backgroundColor": "dodgerblue" }, {"wert": 4, "bezeichnung": "kalt", "zahl": -1, "color": "black", "backgroundColor": "deepskyblue" }, {"wert": 24, "bezeichnung": "", "zahl": 0, "color": "black", "backgroundColor": "#CCCCCC" }, {"wert": 30, "bezeichnung": "warm", "zahl": 1, "color": "black", "backgroundColor": "orange" ! }, {"wert": 35, "bezeichnung": "warm", "zahl": 2, "color": "black", "backgroundColor": "orange" ! } ] }, "wattFernsehecke": { "obereGrenzeBezeichnung": "Fernseher an", "obereGrenzeZahl": 3, "ogColor": "white", "ogBackgroundColor": "red", "schwellwerte": [ {"wert": 0, "bezeichnung": "Alles aus", "zahl": 0, "color": "black", "backgroundColor": "lime" }, {"wert": 20, "bezeichnung": "Standby OK", "zahl": 1, "color": "black", "backgroundColor": "limegreen" }, {"wert": 50, "bezeichnung": "Standby ohne Sub", "zahl": 1, "color": "black", "backgroundColor": "yellow" }, {"wert": 100, "bezeichnung": "TV aus, Sub noch an", "zahl": 2, "color": "black", "backgroundColor": "orange" } ] }, "wattUSV": { "obereGrenzeBezeichnung": "hoher Verbrauch", "obereGrenzeZahl": 3, "ogColor": "white", "ogBackgroundColor": "red", "schwellwerte": [ {"wert": 0, "bezeichnung": "Alles aus", "zahl": -1, "color": "white", "backgroundColor": "red" }, {"wert": 60, "bezeichnung": "optimierter Verbrauch", "zahl": 0, "color": "black", "backgroundColor": "lime" }, {"wert": 80, "bezeichnung": "niedriger Verbrauch", "zahl": 1, "color": "black", "backgroundColor": "limegreen" }, {"wert": 110, "bezeichnung": "normaler Verrauch", "zahl": 1, "color": "black", "backgroundColor": "yellow" }, {"wert": 120, "bezeichnung": "erhöhter Verbrauch", "zahl": 2, "color": "black", "backgroundColor": "orange" } ] }, "wattSonos": { "obereGrenzeBezeichnung": "hoher Verbrauch", "obereGrenzeZahl": 3, "ogColor": "white", "ogBackgroundColor": "red", "schwellwerte": [ {"wert": 0, "bezeichnung": "Sonos aus", "zahl": 0, "color": "black", "backgroundColor": "lime" }, {"wert": 9, "bezeichnung": "Standby", "zahl": 1, "color": "black", "backgroundColor": "yellow" }, {"wert": 20, "bezeichnung": "Sonos ist an", "zahl": 2, "color": "black", "backgroundColor": "orange" } ] }, "wattEsxi": { "obereGrenzeBezeichnung": "sehr hoch", "obereGrenzeZahl": 3, "ogColor": "white", "ogBackgroundColor": "red", "schwellwerte": [ {"wert": 13, "bezeichnung": "normal", "zahl": 0, "color": "black", "backgroundColor": "lime" }, {"wert": 14, "bezeichnung": "erhöht", "zahl": 1, "color": "black", "backgroundColor": "yellow" }, {"wert": 15, "bezeichnung": "hoch", "zahl": 2, "color": "black", "backgroundColor": "orange" } ] }, "sonosVol": { "obereGrenzeBezeichnung": "sehr laut", "obereGrenzeZahl": 5, "ogColor": "white", "ogBackgroundColor": "red", "schwellwerte": [ {"wert": 0, "bezeichnung": "aus", "zahl": 0, "color": "black", "backgroundColor": "lime" }, {"wert": 9, "bezeichnung": "leise", "zahl": 1, "color": "black", "backgroundColor": "limegreen" }, {"wert": 40, "bezeichnung": "normal", "zahl": 2, "color": "black", "backgroundColor": "rgb(204,204,204)" }, {"wert": 50, "bezeichnung": "etwas lauter", "zahl": 3, "color": "black", "backgroundColor": "yellow" }, {"wert": 60, "bezeichnung": "laut", "zahl": 4, "color": "black", "backgroundColor": "orange" } ] }, "windstaerke": { "obereGrenzeBezeichnung": "Orkan", "obereGrenzeZahl": 12, "ogColor": "white", "ogBackgroundColor": "red", "schwellwerte": [ {"wert": 1, "bezeichnung": "Windstill", "zahl": 0, "color": "black", "backgroundColor": "rgb(204,204,204)" }, {"wert": 5, "bezeichnung": "leiser Zug", "zahl": 1, "color": "black", "backgroundColor": "rgb(204,204,204)" }, {"wert": 11, "bezeichnung": "leichte Briese", "zahl": 2, "color": "black", "backgroundColor": "rgb(204,204,204)" }, {"wert": 19, "bezeichnung": "schwacher Wind", "zahl": 3, "color": "black", "backgroundColor": "rgb(204,204,204)" }, {"wert": 28, "bezeichnung": "mäßiger Wind", "zahl": 4, "color": "black", "backgroundColor": "rgb(204,204,204)" }, {"wert": 38, "bezeichnung": "frischer Wind", "zahl": 5, "color": "black", "backgroundColor": "rgb(204,204,204)" }, {"wert": 49, "bezeichnung": "starker Wind", "zahl": 6, "color": "black", "backgroundColor": "yellow" }, {"wert": 61, "bezeichnung": "steifer Wind", "zahl": 7, "color": "black", "backgroundColor": "gold" }, {"wert": 74, "bezeichnung": "stürmischer Wind", "zahl": 8, "color": "black", "backgroundColor": "orange" }, {"wert": 88, "bezeichnung": "Sturm", "zahl": 9, "color": "black", "backgroundColor": "darkorange" }, {"wert": 102, "bezeichnung": "schwerer Sturm", "zahl": 10, "color": "black", "backgroundColor": "red" }, {"wert": 88, "bezeichnung": "orkanartiger Sturm", "zahl": 11, "color": "white", "backgroundColor": "darkorange" } ] }, "hdFreiProzent": { "obereGrenzeBezeichnung": "voll", "obereGrenzeZahl": 4, "ogColor": "white", "ogBackgroundColor": "red", "schwellwerte": [ {"wert": 85, "bezeichnung": "viel frei", "zahl": 0, "color": "black", "backgroundColor": "lime" }, {"wert": 90, "bezeichnung": "gut", "zahl": 1, "color": "black", "backgroundColor": "limegreen" }, {"wert": 95, "bezeichnung": "erhöht", "zahl": 2, "color": "black", "backgroundColor": "yellow" }, {"wert": 98, "bezeichnung": "fast voll", "zahl": 3, "color": "black", "backgroundColor": "orange" } ] }, "uv-index": { "obereGrenzeBezeichnung": "UV Index nicht bekannt", "obereGrenzeZahl": 0, "ogColor": "gray", "ogBackgroundColor": "rgb(204,204,204)", "schwellwerte": [ {"wert": 2, "bezeichnung": "keine bis gering, UV Schutz nicht erforderlich", "zahl": 0, "color": "black", "backgroundColor": "rgb(204,204,204)" }, {"wert": 5, "bezeichnung": "mittel, UV Schutz sehr empfehlenswert", "zahl": 1, "color": "black", "backgroundColor": "rgb(204,204,204)" }, {"wert": 7, "bezeichnung": "hoch, UV Schutz erforderlich", "zahl": 2, "color": "red", "backgroundColor": "yellow" }, {"wert": 10, "bezeichnung": "sehr hoch, UV Schutz unbedingt erforderlich", "zahl": 3, "color": "black", "backgroundColor": "orange" }, {"wert": 99, "bezeichnung": "extrem, UV Schutz ist ein muss", "zahl": 4, "color": "white", "backgroundColor": "red" } ] }, "updates": { "obereGrenzeBezeichnung": "viele Updates", "obereGrenzeZahl": 4, "ogColor": "white", "ogBackgroundColor": "red", "schwellwerte": [ {"wert": 0, "bezeichnung": "Alles aktuell", "zahl": 0, "color": "black", "backgroundColor": "lime" }, {"wert": 3, "bezeichnung": "Update verfügbar", "zahl": 1, "color": "black", "backgroundColor": "yellow" }, {"wert": 5, "bezeichnung": "updates verfügbar", "zahl": 2, "color": "black", "backgroundColor": "orange" }, {"wert": 10, "bezeichnung": "mehrere updates", "zahl": 3, "color": "black", "backgroundColor": "darkorange" } ] }, "load2core": { "obereGrenzeBezeichnung": "Überlast", "obereGrenzeZahl": 5, "ogColor": "white", "ogBackgroundColor": "red", "schwellwerte": [ {"wert": 0.5, "bezeichnung": "Last niedrig", "zahl": 0, "color": "black", "backgroundColor": "lime" }, {"wert": 1.0, "bezeichnung": "Last norrmal", "zahl": 1, "color": "black", "backgroundColor": "limegreen" }, {"wert": 1.2, "bezeichnung": "erhöhte Last", "zahl": 2, "color": "black", "backgroundColor": "yellow" }, {"wert": 1.6, "bezeichnung": "Hohe Last", "zahl": 3, "color": "black", "backgroundColor": "orange" }, {"wert": 2.0, "bezeichnung": "sehr hohe Last", "zahl": 4, "color": "black", "backgroundColor": "darkorange" } ] }, "load1core": { "obereGrenzeBezeichnung": "Überlast", "obereGrenzeZahl": 5, "ogColor": "white", "ogBackgroundColor": "red", "schwellwerte": [ {"wert": 0.4, "bezeichnung": "Last niedrig", "zahl": 0, "color": "black", "backgroundColor": "lime" }, {"wert": 0.6, "bezeichnung": "Last norrmal", "zahl": 1, "color": "black", "backgroundColor": "limegreen" }, {"wert": 0.7, "bezeichnung": "erhöhte Last", "zahl": 2, "color": "black", "backgroundColor": "yellow" }, {"wert": 0.8, "bezeichnung": "Hohe Last", "zahl": 3, "color": "black", "backgroundColor": "orange" }, {"wert": 1.0, "bezeichnung": "sehr hohe Last", "zahl": 4, "color": "black", "backgroundColor": "darkorange" } ] }, "alarme": { "obereGrenzeBezeichnung": "Alarme stehen an", "obereGrenzeZahl": 1, "ogColor": "white", "ogBackgroundColor": "red", "schwellwerte": [ {"wert": 0, "bezeichnung": "keine Alarme", "zahl": 0, "color": "black", "backgroundColor": "lime" } ] }, "gruenGelb": { "obereGrenzeBezeichnung": "erhöht", "obereGrenzeZahl": 1, "ogColor": "black", "ogBackgroundColor": "yellow", "schwellwerte": [ {"wert": 0, "bezeichnung": "normal", "zahl": 0, "color": "black", "backgroundColor": "lime" } ] } }; ! /* UV-Index Gefährdung (UV-Gefahrenindex Schutzmaßnahmen 0-2 keine bis gering nicht erforderlich 3-5 mittel sehr empfehlenswert 6-7 hoch erforderlich 8-10 sehr hoch unbedingt erforderlich ab 11 extrem sind ein Muss */ ! function dpAnlegen() { for (var geraet in schwellwerte) { createState(pfad + schwellwerte[geraet].datenpunkt + ".text","initalisiert"); createState(pfad + schwellwerte[geraet].datenpunkt + ".zahl",0); createState(pfad + schwellwerte[geraet].datenpunkt + ".color","black"); createState(pfad + schwellwerte[geraet].datenpunkt + ".backgroundColor","silver"); logs(pfad + schwellwerte[geraet].datenpunkt + " wurde angelegt","debug"); } } ! //var reg = new RegExp("^javascript\\.\\d+\\." + hueSzenenApapterPfad.replace('.', '\\.') + ".*\\.szene"); //on(reg , function (obj) { ! function setSchwellwerte(obj) { if(liste[schwellwerte[obj.id].liste]){ //log("Liste: " + schwellwerte[obj.id].liste); ! logs("Anzahl Schwellwerte: " + liste[schwellwerte[obj.id].liste].schwellwerte.length),"debug"; //var schwellwerteListe = liste var bezeichnung = liste[schwellwerte[obj.id].liste].obereGrenzeBezeichnung; var zahl = liste[schwellwerte[obj.id].liste].obereGrenzeZahl; var color = liste[schwellwerte[obj.id].liste].ogColor; var backgroundColor = liste[schwellwerte[obj.id].liste].ogBackgroundColor; var test = 9999; for (var i = 0; i < liste[schwellwerte[obj.id].liste].schwellwerte.length; i++) { if (obj.state.val <= liste[schwellwerte[obj.id].liste].schwellwerte[i].wert) { bezeichnung = liste[schwellwerte[obj.id].liste].schwellwerte[i].bezeichnung; zahl = liste[schwellwerte[obj.id].liste].schwellwerte[i].zahl; test = liste[schwellwerte[obj.id].liste].schwellwerte[i].wert; color = liste[schwellwerte[obj.id].liste].schwellwerte[i].color; backgroundColor = liste[schwellwerte[obj.id].liste].schwellwerte[i].backgroundColor; break; } } setState(pfad + schwellwerte[obj.id].datenpunkt + ".text",bezeichnung); setState(pfad + schwellwerte[obj.id].datenpunkt + ".zahl",zahl); setState(pfad + schwellwerte[obj.id].datenpunkt + ".color",color); setState(pfad + schwellwerte[obj.id].datenpunkt + ".backgroundColor",backgroundColor); //logs (schwellwerte[obj.id].datenpunkt + " - State: " + obj.state.val + " ist kleiner/gleich: " + test + " - Bezeichnung: " + bezeichnung + " - Zahl: "+ zahl, "debug"); } else { log("Schwellwertliste für " + obj.id + " nicht vorhanden","error"); } } ! // TODO: die Subscription nicht im Loop anlegen! ! function onAnlegen() { for (var geraet in schwellwerte) { logs("Schedule angelegt: " + geraet,"debug"); ! on({id: geraet}, function(obj) { //log(obj.id + ": " + obj.state.val); setSchwellwerte(obj); }); } } ! function getSchwellwerte() { for (var geraet in schwellwerte) { var val = getState(geraet).val; var obj = { "id":geraet, "state": { "val":val } }; setSchwellwerte(obj); } } ! // main - Hauptprogramm (wird beim Scriptstart ausgeführt) // ============================================================================= ! dpAnlegen(); // Datenpunkte anlegen onAnlegen(); // Subscribes anlegen ! function main() { // Hauptprogramm getSchwellwerte(); } setTimeout(main, 500);
! Benötigt das globale Skript logs() (für Loglevel innerhalb eines Skripts):
! >![spoiler]~~[code]~~// globale Funktion: logs(logtext,level,color) // Version: 0.1.1 ! // Beschreibung: Ermöglicht innerhalb eines Javascript-Scripts unterschiedliche Loglevel // Benutzung, wie log() mit der zusätzlichen Option die Ausgabefarbe zu überschreiben ! // Übergabeparameter: logtext der Text, der als Log ausgegeben werden soll // level [optional] der Loglevel der Meldung als String // der level (mögliche Werte definiert in JSON loglevels), in dem der Text ausgegeben werden soll // color [optional] die html-Farbe der Meldung als String, siehe z.B.: http://tomheller.de/theholycymbal/html-farben.html // "none" -> es wird die Standardfarbe von log() im Level Info ausgegebn. // nichts angegeben -> es werden die Farben ais dem JSON loglevels je nach level ausgegeben // html-Farbe übergeben -> es wird die übergebenen Farbe ausgegeben ! // Rückgabe: Gibt den aktuellen Loglevel für diesen Aufruf zurück. // Gültiger level beim Aufruf -> der im Script definierte Loglevel wird zurückgegeben // kein Level angegeben -> es wird der Level "info" verwendet und zurückgegeben // ungültiger Level -> es wird der Level "info" verwendet und zurückgegeben ! // Infos: Benötigt im Javascript, welches die Funktion logs() verwendet // die Variabele loglevel, z.B. var loglevel = "info"; // // 0.1.1 Default Loglevel ergänzt ! // ----------------------------------------------------------------------------- ! // globale Scripte werden vor dem eigentlichen Script als Text reinkopiert // daher kann im globalen Script eine Variable einen Defaultwert enthalten ! var loglevel = 'info'; // Default Loglevel, wenn der Loglevel im aufrufenden Script nicht definiert ist ! // ----------------------------------------------------------------------------- // Script Log - logs() - ANFANG // ----------------------------------------------------------------------------- var loglevels = { "debug2": {"level": -2, "leveltext":"debug2: ", "color": "blue"}, "debug1": {"level": -1, "leveltext":"debug1: ", "color": "mediumblue"}, "debug": {"level": 0, "leveltext":"debug0: ", "color": "darkblue"}, "debug0": {"level": 0, "leveltext":"debug0: ", "color": "mediumblue"}, "info": {"level": 10, "leveltext":"", "color": "none"}, "warn": {"level": 20, "leveltext":"warn: ", "color": "darkorange"}, "error": {"level": 30, "leveltext":"error:", "color": "darkred"} }; ! function logs(logtext,level,color) { ! // in der Funktion den gesetzten Level überprüfen if (typeof level == 'undefined') {level = 'info'} if (level in loglevels) {} else { log("ungültiger loglevel **" + level + "** in Funktion logs() im Script","warn"); log("loglevel für das Script auf Stufe: " + loglevel + " gesetzt.","warn"); level = 'info'; loglevel = level; } ! // den im Script konfigurierten Loglevel prüfen // zum Scriptstart muss die Variable loglevel deklariert werden // z.B.: // var loglevel = "warn"; if (typeof loglevel == 'undefined') {loglevel = 'info'} if (loglevel in loglevels) {} else { var loglevelError = loglevel; loglevel = 'info'; // Loglevel auf Info stellen, wenn kein gültiger Loglevel im Script deklariert ist log("ungültiger loglevel für logs() in der Konfiguration im Script","error"); log("variable loglevel am Anfang des Scripts einem gültigen Wert zuweisen","error"); log('im Script konfigurierter loglevel: ' + loglevelError + ' -> geändert in: ' + loglevel) + '',"warn"; } ! // Farbe ernitteln if (typeof color == 'undefined') {color = loglevels[level].color} ! // Log je nach eingestelltem Loglevel ausgeben var levelConf = loglevels[loglevel].level; var levelLogs = loglevels[level].level; if (levelLogs >= levelConf) { if (color == "none") { log(loglevels[level].leveltext + logtext); } else { log('' + loglevels[level].leveltext + logtext + ''); } } ! return loglevel; } // ----------------------------------------------------------------------------- // Script Log - logs() - ENDE // ----------------------------------------------------------------------------- [/code]
[/spoiler]
! In neueren Skripten verwende ich logs() selbst nicht mehr.
! War zwar nett. Erschwert aber die Weitergabe von Skripten.
! In Vis wird dann bei der Formatierung z.B. auf die Schwellwerte verwiesen. Beispiel:
! >![spoiler]~~[code]~~[{"tpl":"tplHtml","data":{"visibility-cond":"==","visibility-val":1,"refreshInterval":"0","html":"Bad","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"40px","top":"400px","background":"rgb(204, 204, 204) none repeat scroll 0% 0% / auto padding-box border-box","width":"116px","height":"18px","z-index":"4","padding-left":"2px"},"widgetSet":"basic"},{"tpl":"tplHtml","data":{"visibility-cond":"==","visibility-val":1,"refreshInterval":"0","html":"{javascript.0.Schwellwerte.Klima.Temperatur.Bad.text}","visibility-oid":"","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"220px","top":"400px","background":"{javascript.0.Schwellwerte.Klima.Temperatur.Bad.backgroundColor}","width":"88px","height":"18px","color":"{javascript.0.Schwellwerte.Klima.Temperatur.Bad.color}","text-align":"center","z-index":"8"},"widgetSet":"basic"},{"tpl":"tplHtml","data":{"visibility-cond":"==","visibility-val":1,"refreshInterval":"0","html":"{javascript.0.Schwellwerte.Klima.Luftfeuchtigkeit.Bad.text}","visibility-oid":"","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"380px","top":"400px","background":"{javascript.0.Schwellwerte.Klima.Luftfeuchtigkeit.Bad.backgroundColor}","width":"78px","height":"18px","color":"{javascript.0.Schwellwerte.Klima.Luftfeuchtigkeit.Bad.color}","text-align":"center","z-index":"8"},"widgetSet":"basic"},{"tpl":"tplValueBool","data":{"oid":"hm-rpc.0.GEQ0071605.0.LOWBAT","visibility-cond":"==","visibility-val":1,"html_false":" ","html_true":" ","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"790px","top":"400px","z-index":"4","width":"28px","height":"18px","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplValueListHtml8","data":{"oid":"hm-rpc.0.KEQ0175977.0.LOWBAT","visibility-cond":"==","visibility-val":1,"count":"1","style0":"background:rgb(204, 204, 204);padding-left:2px","style1":"background:yellow;padding-left:2px","test_list":"1","value0":"","value1":"LB","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"790px","top":"400px","z-index":"4","width":"28px","height":"18px","padding-left":"","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplValueListHtml8","data":{"oid":"hm-rpc.0.KEQ0175977.0.UNREACH","visibility-cond":"==","visibility-val":1,"count":"1","style0":"background:rgb(204, 204, 204);padding-left:2px","style1":"background:yellow;padding-left:2px","test_list":"1","value0":"","value1":"UR","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"820px","top":"400px","z-index":"4","width":"28px","height":"18px","padding-left":"","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplValueListHtml8","data":{"oid":"hm-rpc.0.KEQ0955547.1.STATE","visibility-cond":"==","visibility-val":1,"count":"1","style0":"{javascript.0.Visualisierung.Fenster.Farbe_Fenster_Bad}","style1":"{javascript.0.Visualisierung.Fenster.Farbe_Fenster_Bad}","test_list":"0","value0":"geschlossen","value1":"geöffnet","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"850px","top":"400px","z-index":"4","width":"108px","height":"18px","padding-left":"","text-align":"center","background":""},"widgetSet":"basic"},{"tpl":"tplValueListHtml8","data":{"oid":"javascript.0.Raumklima.Raum.Bad.Lüftungsempfehlung","visibility-cond":"==","visibility-val":1,"count":"1","style0":"background:rgb(204, 204, 204);padding-left:2px","style1":"{javascript.0.Visualisierung.Fenster.Farbe_Lueften_Bad}","test_list":"1","value0":"","value1":"Lüften","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"620px","top":"400px","z-index":"4","width":"48px","height":"18px","padding-left":"","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplJustgageValueIndicatorColored","data":{"visibility-cond":"==","visibility-val":1,"equalAfter":"240","balance1":"0","balance2":"20","gestures-offsetX":0,"gestures-offsetY":0,"name":"","oid":"javascript.0.Raumklima.Raum.Bad.Feuchtegehalt_Absolut","unit":"g/kg","min_oid":0,"mid_oid":"10","max_oid":"18","digits":"1","html_prepend":" ","color1":"#ff0000","color2":"#444444","color3":"#0000ff","up":" **↑**","equal":" **↑**","down":" ↓","html_append_singular":"","html_append_plural":"","is_comma":true,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"460px","top":"400px","width":"78px","height":"18px","text-align":"right","z-index":"20","background":"rgb(204, 204, 204) none repeat scroll 0% 0% / auto padding-box border-box"},"widgetSet":"justgage"},{"tpl":"tplValueBool","data":{"oid":"hm-rpc.0.GEQ0071605.0.LOWBAT","visibility-cond":"==","visibility-val":1,"html_false":" ","html_true":" ","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"670px","top":"400px","z-index":"4","width":"28px","height":"18px","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplValueListHtml8","data":{"oid":"javascript.0.Raumklima.Raum.Bad.DETAILS_Lüftungsempfehlung.Lüften_Hysterese","visibility-cond":"==","visibility-val":1,"count":"1","style0":"background:rgb(204, 204, 204);padding-left:2px","style1":"background:rgb(204, 204, 204);padding-left:2px","test_list":"0","value0":"","value1":"HY","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"670px","top":"400px","z-index":"4","width":"28px","height":"18px","padding-left":"","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplJustgageValueIndicatorColored","data":{"visibility-cond":"==","visibility-val":1,"equalAfter":"240","balance1":"0","balance2":"20","gestures-offsetX":0,"gestures-offsetY":0,"name":"","oid":"javascript.0.Raumklima.Raum.Bad.Dampfgewicht","unit":"g/m³","min_oid":0,"mid_oid":"10","max_oid":"18","digits":"1","html_prepend":" ","color1":"#ff0000","color2":"#444444","color3":"#0000ff","up":" **↑**","equal":" **↑**","down":" ↓","html_append_singular":"","html_append_plural":"","is_comma":true,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"540px","top":"400px","width":"78px","height":"18px","text-align":"right","z-index":"20","background":"rgb(204, 204, 204) none repeat scroll 0% 0% / auto padding-box border-box"},"widgetSet":"justgage"},{"tpl":"tplJustgageValueIndicatorColored","data":{"visibility-cond":"==","visibility-val":1,"equalAfter":"240","balance1":"0","balance2":"20","gestures-offsetX":0,"gestures-offsetY":0,"name":"","oid":"javascript.0.Raumklima.Raum.Bad.relative_Luftfeuchtigkeit","unit":"%","min_oid":0,"mid_oid":"50","max_oid":99,"digits":"0","html_prepend":" ","color1":"#ff0000","color2":"#444444","color3":"#0000ff","up":" **↑**","equal":" **↑**","down":" ↓","html_append_singular":"","html_append_plural":"","is_comma":false,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"310px","top":"400px","width":"68px","height":"18px","text-align":"center","z-index":"20","background":"{javascript.0.Schwellwerte.Klima.Luftfeuchtigkeit.Bad.backgroundColor}"},"widgetSet":"justgage"},{"tpl":"tplValueBool","data":{"oid":"hm-rpc.0.GEQ0071605.0.LOWBAT","visibility-cond":"==","visibility-val":1,"html_false":" ","html_true":" ","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"700px","top":"400px","z-index":"4","width":"28px","height":"18px","text-align":"center","color":"#666666"},"widgetSet":"basic"},{"tpl":"tplValueListHtml8","data":{"oid":"javascript.0.Raumklima.Raum.Bad.DETAILS_Lüftungsempfehlung.Lüften_b1_Entfeuchten","visibility-cond":"==","visibility-val":1,"count":"1","style0":"background:rgb(204, 204, 204);padding-left:2px","style1":"background:rgb(204, 204, 204);padding-left:2px","test_list":"0","value0":"","value1":"En","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"700px","top":"400px","z-index":"4","width":"28px","height":"18px","padding-left":"","text-align":"center","color":"#666666"},"widgetSet":"basic"},{"tpl":"tplValueBool","data":{"oid":"hm-rpc.0.GEQ0071605.0.LOWBAT","visibility-cond":"==","visibility-val":1,"html_false":" ","html_true":" ","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"730px","top":"400px","z-index":"4","width":"28px","height":"18px","text-align":"center","color":"#666666"},"widgetSet":"basic"},{"tpl":"tplValueListHtml8","data":{"oid":"javascript.0.Raumklima.Raum.Bad.DETAILS_Lüftungsempfehlung.Lüften_b2_Kühlen","visibility-cond":"==","visibility-val":1,"count":"1","style0":"background:rgb(204, 204, 204);padding-left:2px","style1":"background:rgb(204, 204, 204);padding-left:2px","test_list":"0","value0":"","value1":"Kü","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"730px","top":"400px","z-index":"4","width":"28px","height":"18px","padding-left":"","text-align":"center","color":"#666666"},"widgetSet":"basic"},{"tpl":"tplValueBool","data":{"oid":"hm-rpc.0.GEQ0071605.0.LOWBAT","visibility-cond":"==","visibility-val":1,"html_false":" ","html_true":" ","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"760px","top":"400px","z-index":"4","width":"28px","height":"18px","text-align":"center","color":"#666666"},"widgetSet":"basic"},{"tpl":"tplValueListHtml8","data":{"oid":"javascript.0.Raumklima.Raum.Bad.DETAILS_Lüftungsempfehlung.Lüften_b3_Auskühlschutz","visibility-cond":"==","visibility-val":1,"count":"1","style0":"background:rgb(204, 204, 204);padding-left:2px","style1":"background:rgb(204, 204, 204);padding-left:2px","test_list":"0","value0":"","value1":"Au","gestures-offsetX":0,"gestures-offsetY":0,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"760px","top":"400px","z-index":"4","width":"28px","height":"18px","padding-left":"","text-align":"center","color":"#666666"},"widgetSet":"basic"},{"tpl":"tplJustgageValueIndicatorColored","data":{"visibility-cond":"==","visibility-val":1,"equalAfter":"240","balance1":"0","balance2":"20","gestures-offsetX":0,"gestures-offsetY":0,"name":"","oid":"javascript.0.Raumklima.Raum.Bad.Temperatur","unit":"°C","min_oid":"10","mid_oid":"20","max_oid":"50","digits":"1","html_prepend":" ","color1":"#0000ff","color2":"#444444","color3":"#ff0000","up":" **↑**","equal":" **↑**","down":" ↓","html_append_singular":"","html_append_plural":"","is_comma":true,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide"},"style":{"left":"160px","top":"400px","width":"68px","height":"18px","text-align":"center","z-index":"20","background":"{javascript.0.Schwellwerte.Klima.Temperatur.Bad.backgroundColor}"},"widgetSet":"justgage"}][/code]
[/spoiler]
! Darstellung:
!
! Edit:
!
! Wie geschrieben... Fleissarbeit... :roll:
! Ich kann mir nicht vorstellen, dass sich das sonst jemand antun will :lol:[/i][/i][/i][/i][/i][/i] -
Und noch ein Beispiel, wo ich das stark nutze (Systemübersicht):
Die farbigen Formatierungen, usw. findet man auch im Schwellwert-Skript im Post davor.
-
[…]
Wie geschrieben… Fleissarbeit... :roll:
Ich kann mir nicht vorstellen, dass sich das sonst jemand antun will :lol: `
Uiii, das sieht wirklich nach extremer Fleissarbeit aus. Trotzdem würde ich mich dafür interessieren das auch für mich umzusetzen. Muss nur schauen ob ich deine Logik die du da anwendest schnell durchschauen kann. Mir würde auch interessieren was diese "logs()" Funktion bitte sein soll und woher du die nimmst?
-
Und noch ein Beispiel, wo ich das stark nutze (Systemübersicht):
Die farbigen Formatierungen, usw. findet man auch im Schwellwert-Skript im Post davor. `
Uiii. Jetzt machst du mich in der Tat NOCH neugieriger Denn so eine Übersichtsseite in mein VIS zu übernehmen würde mich auch interessieren. Kannst du irgendwie dein VIS View davon auch zur Verfügung stellen und ggf. auch noch die passenden Skripte dazu damit man sieht woher/wie du diese Informationen alle extrahierst.
-
Mir würde auch interessieren was diese "logs()" Funktion bitte sein soll und woher du die nimmst? `
logs() ist das kleine Skript im Post oben in der Mitte (zwischen Schwellwerte-Skript und dem Widget).
Es wird unter Skripte als globals Skript gespeichert und kann dann in jedem Skript verwendet werden.
Ich hatte das mal global abgelegt, um längere Skripte unabhängig von den Adaptereinstellungen debugen zu können, z.B. in dem doch recht langen Bluetooth BLE Skript.
Drei Möglichkeiten damit umzugehen:
1.) Nutzen. Es in den globalen Skripten speichern.
2.) das Skript lokal in das Schwellwerte Skript reinzukopieren
3.) alle logs() löschen / auskommentieren
-
Kannst du irgendwie dein VIS View davon auch zur Verfügung stellen und ggf. auch noch die passenden Skripte dazu damit man sieht woher/wie du diese Informationen alle extrahierst. `
Das sind zig kleine Skripte. Ich kann gerne hier ein paar Beispiele ablegen.
Z.B. erzeugt ein lokales Skript auf dem Ubuntu Server mit der mySQL Datenbank Abfragen auf dem Server, die wiederum dort lokal gespeichert werden. Der ioBroker Server (ein 2. Ubuntu Server) hat dann den entsprechenden Pfad gemountet. Diese Ergebnisdateien werden mit excec() cat ausgelesen und ausgewertet. Lokal werden direkt die Abfragen gestartet.
Ein paar Beispiele:
Abfrage im Web, welche CCU2 Software aktuell verfügbar ist:
! ````
request = require('request');
! var url ="http://update.homematic.com/firmware/download?cmd=js_check_version&version=12345&product=HM-CCU2&serial=12345";
var timeout = 10000;
! var pfad = "Systeminfos.CCU" + "."; // Pfad Systeminfos zur CCU
var cronStr = "*/45 * * * *";
! var idActVersion = pfad + 'Version_aktuell';
! createState(idActVersion, "", {
name: 'CCU SW Version aktuell verfügbar',
desc: 'CCU SW Version aktuell verfügbar',
type: 'string',
unit: '',
role: 'value'
});
! var options = {
url: url= url,
timeout: timeout,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'
}
};
! function readWeb(url) {
try {
request(options, function (error, response, body) {
if (!error && ('' + response.statusCode).match(/^2\d\d$/)) { // kein Fehler (2xx), Inhalt in body
log(response.statusCode);
if (body !== null) {
var actVersion = body.match(/\d+.\d+.\d+/);//log(body); //log(actVersion);
! if (actVersion !== null) setState(idActVersion ,actVersion.toString());
}} else { // Fehler bei der Abfrage der CUxD Webseite //log("StatusCode="+response.statusCode); if (error.code !== null) { log("ERROR CODE: " + error.code + " ################"); // EHOSTUNREACH, ETIMEDOUT if (!error) { log("response.statusCode: " + response.statusCode); } else { // } log(error,'error'); setState(idActVersion,"Fehler"); } else { log ("#### ERROR CODE = null ####",error); } /* setTimeout(function(l) { // bei Fehler jede Stunde abfragen readWeb(url); },3600000); */ } }); } catch (error) { log('Fehler (try) leseWebseite: ' + error, 'error'); }
}
! // regelmässige Wiederholungen
// -----------------------------------------------------------------------------
schedule(cronStr, function () {
readWeb(url);
});
! // main
// -----------------------------------------------------------------------------
function main() {
readWeb(url);
}
! // Start Skript:
// -----------------------------------------------------------------------------
setTimeout(main, 500);
! ````Daten der CCU2 über CuxD abfragen (aktuelle Firmware, Auslastung, usw.):
! ````
! // Skriptname und Instanz nicht ändern!
// javascript.1.scriptEnabled.Daten.Read_CUxD
//
// scriptEnabled wird von anderen Skripten verwendet:
// script.js.Steuerung.Reaktion_auf_Ping
! request = require('request');
! var ccuIp ="172.16.199.99";
var timeout = 3000;
! var pfad = "Systeminfos.CCU" + "."; // Pfad Systeminfos zur CCU
var pfad2 = "Systeminfos.CUxD" + "."; // Pfad Systeminfos zu CUxD
var cronStr = "*/10 * * * ";
! var idCcuUptime = pfad + 'uptime';
var idCcuVersion = pfad + 'Version';
! var idCcuLa01 = pfad + 'Load_Average.load_average_01_min';
var idCcuLa05 = pfad + 'Load_Average.load_average_05_min';
var idCcuLa15 = pfad + 'Load_Average.load_average_15_min';
! var idCpuLoad = pfad + '10s_CPU_Load';
! var idCuxdUptime = pfad2 + 'uptime';
var idCuxdVersion = pfad2 + 'Version';
var idCuxdStatus = pfad2 + 'Status_http';
var idCuxdStatusBool= pfad2 + 'Status_http_bool';
var idCuxdError = pfad2 + 'http_error';
! createState(idCcuUptime, 0, {
name: 'CCU Uptime',
desc: 'CCU Uptime',
type: 'number',
unit: 'Tag(e)',
role: 'value'
});
! createState(idCcuVersion, "", {
name: 'CCU SW Version',
desc: 'CCU SW Version',
type: 'string',
unit: '',
role: 'value'
});
! createState(idCuxdUptime, 0, {
name: 'CUxD Uptime',
desc: 'CUxD Uptime',
type: 'number',
unit: 'Tag(e)',
role: 'value'
});
! createState(idCuxdVersion, "", {
name: 'CUxD SW Version',
desc: 'CUxD SW Version',
type: 'string',
unit: '',
role: 'value'
});
! createState(idCuxdStatus, 0, {
name: 'Status Webseite CUxD',
desc: 'Status Webseite CUxD',
type: 'number',
unit: '',
role: 'value'
});
! createState(idCuxdStatusBool, false, {
name: 'Status Webseite CUxD bool',
desc: 'Status Webseite CUxD bool',
type: 'boolean',
unit: '',
role: 'value'
});
! createState(idCuxdError, "", {
name: 'letzte Meldung Webseite CUxD',
desc: 'letzte Meldung Webseite CUxD',
type: 'string',
unit: '',
role: 'value'
});
! createState(idCcuLa01, 0, {
name: 'mittlere Systemauslastung in der letzten Minute',
desc: 'mittlere Systemauslastung in der letzten Minute',
type: 'number',
unit: '',
role: 'value'
});
! createState(idCcuLa05, 0, {
name: 'mittlere Systemauslastung in der letzten 5 Minuten',
desc: 'mittlere Systemauslastung in der letzten 5 Minuten',
type: 'number',
unit: '',
role: 'value'
});
! createState(idCcuLa15, 0, {
name: 'mittlere Systemauslastung in der letzten 15 Minuten',
desc: 'mittlere Systemauslastung in der letzten 15 Minuten',
type: 'number',
unit: '',
role: 'value'
});
! createState(idCpuLoad, 0, {
name: '10 Sekunden CPU Load',
desc: '10 Sekunden CPU Load',
type: 'number',
unit: '%',
role: 'value'
});
! var options = {
url: url= "http://" + ccuIp + "/addons/cuxd/index.ccc?m=15",
timeout: timeout,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'
}
};
! function readCUxD(url) {
try {
request(options, function (error, response, body) {
if (!error && ('' + response.statusCode).match(/^2\d\d$/)) { // kein Fehler (2xx), Inhalt in body
//log(response.statusCode);
var cuxdUptimeStr = body.match(/CUxD-Uptime(.+)/i);
var ccuUptimeStr = body.match(/CCU-Uptime(.+)/i);
var speicher = body.match(/Speicher:(.+)/i);
var filesystem = body.match(/Filesystem: / (.+)/i);
var filesystemSD = body.match(/Filesystem: /media/sd(.+)/i);
var loadAverage = body.match(/load-average: (.)+/i);
var cpuLoad = loadAverage;
! var cuxdVersion = cuxdUptimeStr.toString().match(/((\d+.){1,2}\d+)/i);
var cuxdUptime = cuxdUptimeStr.toString().replace(/ Tag.+/i,"");
cuxdUptime = parseInt(cuxdUptime.replace(/(.?)): /,""));var ccuVersion = ccuUptimeStr.toString().match(/((\d+\.){1,2}\d+)/i); var ccuUptime = ccuUptimeStr.toString().replace(/ Tag.+/i,""); ccuUptime = parseInt(ccuUptime.replace(/(.*?)\): /,""));
! loadAverage = loadAverage.toString().replace(/load-average: /, "");
loadAverage = loadAverage.match(/.{14}/);
loadAverage = loadAverage.toString().replace(/,/g,".");
loadAverage = loadAverage.split(" ");
! cpuLoad = cpuLoad.toString().replace(/.+cpu-load: /, "");
cpuLoad = cpuLoad.toString().replace("%", "");! //log("-------------------------------------");
//log(cuxdUptimeStr);
//log(ccuUptimeStr);
//log(speicher);
log("Filesystem: "+filesystem);
log("FilesystemSD: "+filesystemSD);
//log("CUxD Version : "+ cuxdVersion[0]);
//log("CUxD Uptime: " + cuxdUptime + " Tag(e)");
//log("ccu Version : "+ ccuVersion[0]);
//log("ccu Uptime: " + ccuUptime + " Tag(e)");
//log(body);
! setState(idCcuLa01 ,parseFloat(loadAverage[0]));
setState(idCcuLa05 ,parseFloat(loadAverage[1]));
setState(idCcuLa15 ,parseFloat(loadAverage[2]));
! setState(idCpuLoad ,parseFloat(cpuLoad));
!
setState(idCuxdStatus ,response.statusCode);
setState(idCuxdStatusBool ,true);
! setState(idCuxdError ,"OK (" + response.statusCode+")");
! setState(idCcuUptime ,ccuUptime);
setState(idCcuVersion ,ccuVersion[0]);
! setState(idCuxdUptime ,cuxdUptime);
setState(idCuxdVersion ,cuxdVersion[0]);} else { // Fehler bei der Abfrage der CUxD Webseite //log("StatusCode="+response.statusCode); log("ERROR CODE: " + error.code + " ################"); // EHOSTUNREACH, ETIMEDOUT if (!error) { setState(idCuxdStatus ,response.statusCode); } else { setState(idCuxdStatus ,-1); } setState(idCuxdStatusBool ,false); setState(idCuxdError ,formatDate(new Date(), "YYYY-MM-DD,hh:mm " + error));
! // Uptime negieren, wenn Webseite nicht erreichbar
if (getState(idCuxdUptime).val > 0) setState(idCuxdUptime,getState(idCuxdUptime).val * -1);
if (getState(idCcuUptime).val > 0) setState(idCcuUptime,getState(idCcuUptime).val * -1);
log(error,'error');setTimeout(function(l) { // bei Fehler jede Minute abfragen readCUxD(url); },60000); } }); } catch (error) { log('Fehler (try) leseWebseite: ' + error, 'error'); }
}
! // regelmässige Wiederholungen
// -----------------------------------------------------------------------------
schedule(cronStr, function () {
readCUxD(url);
});
! // main
// -----------------------------------------------------------------------------
function main() {
readCUxD(url);
}
! // Start Skript:
// -----------------------------------------------------------------------------
setTimeout(main, 500);
! ````Vergleich der Firmware im Internet und der auf der CCU2:
!
var pfad = "Systeminfos.CCU" + "."; // Pfad Systeminfos zur CCU ! var idFWnow = "javascript.1.Systeminfos.CCU.Version"/*CCU SW Version*/; var idFWact = "javascript.1.Systeminfos.CCU.Version_aktuell"/*CCU SW Version aktuell verfügbar*/; ! var idFWneu = pfad + 'neue_FW_verfügbar'; var idFWerror = "javascript." + instance + "." + pfad + 'letzte_FW_Abfrage_Fehler'; ! createState(idFWneu, false, { name: 'neue CCU2 Firmware verfügbar', desc: 'neue CCU2 Firmware verfügbar', type: 'boolean', unit: '', role: 'value' }); ! createState(idFWerror, false, { name: 'letzte FW Abfrage war ein Fehler', desc: 'letzte FW Abfrage war ein Fehler', type: 'boolean', unit: '', role: 'value' }); ! // bestehende Firmware hat sich geändert on({id:idFWnow,change:'ne'}, function (obj) { vergleichFW(); }); ! // verfügbare Firmware hat sich geändert on({id:idFWact,change:'ne'}, function (obj) { vergleichFW(); }); ! function vergleichFW() { var fwAct = getState(idFWact).val; var fwNow = getState(idFWnow).val; var fWError = getState(idFWerror).val; log("CCU2 Firmware im Internet : " + fwAct); log("CCU2 Firmware auf der CCU2: " + fwNow); if (fwAct != "Fehler") { if(!fWError) { // nur wenn die letzte Internetabfrage fehlerfrei war if (fwAct != fwNow) { setState(idFWneu,true); // neue Firmware verfügbar log("CCU2: FW ist: " + fwNow + ", neue Firmware verfügbar: " + fwAct); sayit("Für die CCU2 ist eine neue Firmware verfügbar",50); sendTo("pushover" ,"neue CCU2 Firmeware: " + fwAct); sendTo('telegram.1' ,"neue CCU2 Firmeware: " + fwAct); ! } else { setState(idFWneu,false); // keine neue Firmware verfügbar log("CCU2: FW ist aktuell ("+ fwNow+")"); sayit("CCU2 Firmware ist aktuell.",50); } setState(idFWerror,false); // wenn die letzte Internetabfrage einen Fehler hatte, nun auf fehlerfrei setzten und nächstes Mal prüfen } } else { setState(idFWerror,true); // FW Abfrage im Internet = Fehler -> Flag Fehler auf true } } ! // main // ----------------------------------------------------------------------------- function main() { vergleichFW(); } ! // Start Skript: // ----------------------------------------------------------------------------- setTimeout(main, 500); !
Abfrage der node.js Version auf dem ioBroker Server:
! ````
var pfad = "Systeminfos.ioBroker" + ".";
var cronStr = "*/30 * * * *";
! var abfrage = "nodejs -v";
! var idNodejsVersion = pfad + 'node_js_Version';
! createState(idNodejsVersion, "", {
name: 'node.js Version',
desc: 'node.js Version (abgefragt mit nodejs -v)',
type: 'string',
unit: '',
role: 'value'
});! function abfrageVersion() {
exec(abfrage, function(err, stdout, stderr) {
if (err) {
log(err,"error");
return;
}
//log(stdout);
setStateDelayed(idNodejsVersion,stdout,100);
});
}
! function abfragen() {
abfrageVersion();
}
! // regelmässige Wiederholungen
// -----------------------------------------------------------------------------
schedule(cronStr, abfragen);
! // main
// -----------------------------------------------------------------------------
function main() {
abfragen();
}
! // Start Skript:
// -----------------------------------------------------------------------------
! setTimeout(main, 500);
! ````Abfrage der Festplattenauslastung auf dem ioBroker Server:
! ````
// ermittelt auf Linuxrechner den Festplattenplatz für ioBroker
// mit dem Linux Befehl: du
! var pfad = "Systeminfos.ioBroker" + ".";
var cronStr = "*/30 * * * *";
! var abfrageGesamt ="du /opt/iobroker -s -m";
var abfrageData ="du /opt/iobroker/iobroker-data -s -m";
var abfrageObjects ="du /opt/iobroker/iobroker-data/objects.json -s -k";
var abfrageStates ="du /opt/iobroker/iobroker-data/states.json -s -k";
var abfrageLog ="du /opt/iobroker/log -s -k";
! var idHdGesamt = pfad + 'HD_gesamt';
var idHdData = pfad + 'HD_iobroker_data';
var idHdObjects = pfad + 'HD_objects_json';
var idHdStates = pfad + 'HD_states_json';
var idHdLog = pfad + 'HD_log';
! createState(idHdGesamt, 0, {
name: 'Festplattenplatz ioBroker gesamt',
desc: 'Festplattenplatz ioBroker gesamt',
type: 'number',
unit: 'MByte',
role: 'value'
});createState(idHdData, 0, {
name: 'Festplattenplatz ioBroker-data',
desc: 'Festplattenplatz ioBroker-data',
type: 'number',
unit: 'MByte',
role: 'value'
});! createState(idHdStates, 0, {
name: 'Festplattenplatz states.json',
desc: 'Festplattenplatz states.json',
type: 'number',
unit: 'kByte',
role: 'value'
});
! createState(idHdObjects, 0, {
name: 'Festplattenplatz objects.json',
desc: 'Festplattenplatz objects.json',
type: 'number',
unit: 'kByte',
role: 'value'
});
! createState(idHdLog, 0, {
name: 'Festplattenplatz ioBroker Log-Files',
desc: 'Festplattenplatz ioBroker Log-Files',
type: 'number',
unit: 'kByte',
role: 'value'
});
! // Belegung Festplattenplatz für ioBroker mit "du" auslesen
function abfrageHD(abfrage,dp) {
exec(abfrage, function(err, stdout, stderr) {
if (err) {
log(err,"error");
return;
}
stdout = stdout.replace(/[\D]+/, ""); // alle nicht-Ziffern entfernen
setState(dp,parseInt(stdout));
});
}
! function abfragen() {
abfrageHD(abfrageGesamt,idHdGesamt);
abfrageHD(abfrageData,idHdData);
abfrageHD(abfrageObjects,idHdObjects);
abfrageHD(abfrageStates,idHdStates);
abfrageHD(abfrageLog,idHdLog);
}
! // regelmässige Wiederholungen
// -----------------------------------------------------------------------------
schedule(cronStr, abfragen);
! // main
// -----------------------------------------------------------------------------
function main() {
abfragen();
}
! // Start Skript:
// -----------------------------------------------------------------------------
! setTimeout(main, 500);
! ````Abfrage der Speicherauslastung auf dem ioBroker Server:
!
// ermittelt auf Linuxrechner den Speicherverbrauch // mit dem Linux Befehl: free // // Beduetung der Werte: // http://www.selflinux.org/selflinux/html/information_basic02.html ! // getestet unter Ubuntu 16.04 mit deutscher Ausgabe von "free -m" ! // free -m auf der Kosole muss folgende Tabelle ausgeben: ! //# free -m // gesamt benutzt frei gemns. Puffer/Cache verfügbar //Speicher: 7966 1238 5916 10 812 6624 //Auslagerungsspeicher: 8187 0 8187 ! var pfad = "Systeminfos.host.Speicher" + "."; var cronStr = "*/1 * * * *"; ! var forceCreation = false; ! var datenpunkte = { 'Speicher_1_gesamt': { "init":0, "common": { name: 'Speicher gesamt, der für das System verfügbar ist', desc: 'Speicher gesamt, der für das System verfügbar ist (ohne Kernel)', type: 'number', unit: 'MByte', role: 'value' } }, 'Speicher_2_benutzt': { "init":0, "common": { name: 'Speicher benutzt', desc: 'Speicher benutzt', type: 'number', unit: 'MByte', role: 'value' } }, 'Speicher_3_frei': { "init":0, "common": { name: 'Speicher frei', desc: 'Speicher frei', type: 'number', unit: 'MByte', role: 'value' } }, 'Speicher_4_gemeinsam': { "init":0, "common": { name: 'gemeinsamer Speicher für Prozesse', desc: 'gemeinsamer Speicher für Prozesse', type: 'number', unit: 'MByte', role: 'value' } }, 'Speicher_5_Buffer_Cache': { "init":0, "common": { name: 'Speicher als Cache', desc: 'Speicher als Cache', type: 'number', unit: 'MByte', role: 'value' } }, 'Speicher_6_verfügbar': { "init":0, "common": { name: 'verfügbarer Speicher', desc: 'verfügbarer Speicher', type: 'number', unit: 'MByte', role: 'value' } }, 'Auslagerungsspeicher_1_gesamt': { "init":0, "common": { name: 'Auslagerungsspeicher gesamt', desc: 'Auslagerungsspeicher gesamt', type: 'number', unit: 'MByte', role: 'value' } }, 'Auslagerungsspeicher_2_benutzt': { "init":0, "common": { name: 'Auslagerungsspeicher benutzt', desc: 'Auslagerungsspeicher benutzt', type: 'number', unit: 'MByte', role: 'value' } }, 'Auslagerungsspeicher_3_frei': { "init":0, "common": { name: 'Auslagerungsspeicher frei', desc: 'Auslagerungsspeicher frei', type: 'number', unit: 'MByte', role: 'value' } } }; ! function createDp() { var name; var init; var common; for (var dp in datenpunkte) { name = pfad + dp; init = datenpunkte[dp].init; common = datenpunkte[dp].common; createState(name, init , forceCreation, common); } } ! function writeDp(arr) { var i = 0; for (var dp in datenpunkte) { var wert = parseInt(arr[i++]); setState(pfad + dp,wert); //log(dp+": "+ wert + " #" + typeof(wert)); } } ! // Speicher mit "free -m" auslesen function freeMem() { exec('free -m', function(err, stdout, stderr) { if (err) { log(err); return; } stdout = stdout.replace(/[\D]+/, ""); // alle Zeichen vor der ersten Ziffer entfernen stdout = stdout.split(/[\D]+/g); // alle nicht-Ziffern als Trennzeichen für das Array verwenden (im Block) //log(stdout); writeDp(stdout); }); } ! // regelmässige Wiederholungen // ----------------------------------------------------------------------------- schedule(cronStr, freeMem); ! // main // ----------------------------------------------------------------------------- function main() { freeMem(); } ! // Start Skript: // ----------------------------------------------------------------------------- ! createDp(); setTimeout(main, 500); !
usw. usw.
Das sind recht viele und individuelle Abfragen.
Wenn Du aus der Übersicht was gebrauchen kannst, dann kann ich das gezielt posten.
Alles wäre etwas viel…
-
[…]
usw. usw.
Das sind recht viele und individuelle Abfragen.
Wenn Du aus der Übersicht was gebrauchen kannst, dann kann ich das gezielt posten.
Alles wäre etwas viel… `
Danke schonmal dafür. Schau ich mir gleich im Anschluss mal an und geb bescheid wenn mich noch was interessiert von deiner Systemübersicht. An was ich aber gerade sitze ist nochmal dein Schwellwertskript und das passende VIS widget dazu. Das läuft prinzipiell hier schon sehr gut, aber in dem VIS gadget sind z.B. Referenz auf sowas wie '{javascript.0.Visualisierung.Fenster.Farbe_Fenster_Bad}'. Wie genau generierst du die?
-
Das läuft prinzipiell hier schon sehr gut, aber in dem VIS gadget sind z.B. Referenz auf sowas wie '{javascript.0.Visualisierung.Fenster.Farbe_Fenster_Bad}'. Wie genau generierst du die? `
Das sind die Bindings, beschrieben unter:
https://github.com/iobroker/iobroker.vi … of-objects
Du kannst die Felder in VIS direkt mit Datenpunkten verknüpfen.
Du musst Dir nur die benötigte Objekt ID raussuchen und in den geschweiften Klammern eintragen, wo Du sie benötigst.
Entweder unter den Objekten:
Oder im VIS Editor bei einem Widget mit ID (unter ID raussuchen) und dann ausschneiden/einfügen, wo Du es hinhaben willst.
-
Oh… habe die eigentliche Frage falsch gelesen.
Habe mich schon gewundert
-
Oh… habe die eigentliche Frage falsch gelesen.
Habe mich schon gewundert `
In der Tat. Mir ist natürlich das mit den Bindings bekannt, allerdings weiss ich nicht wie du diese "javascript.0.Visualisierung…." Datenpunkte generierst. Darum geht es mir.
-
Das läuft prinzipiell hier schon sehr gut, aber in dem VIS gadget sind z.B. Referenz auf sowas wie '{javascript.0.Visualisierung.Fenster.Farbe_Fenster_Bad}'. Wie genau generierst du die? `
So, nun mit der richtigen Antwort :roll:
Das ist ein ""Logik-Skript".
Das muss ich allerdings mal viel eleganter machen.
Hatte angefangen, ist gewachsen und ist nun extrem fehleranfällig, wenn man was neues hinzufügt.
Das kann man besser machen
! ````
var debug = false;
! var dpPfad = "Visualisierung.Fenster" + "."; // In welchem Pfad sollen die Datenpunkte angelegt werden. String mit "." am Ende.
var instanz = "javascript." + instance + ".";
! var farbeInit = "background:rgb(204, 204, 204);";
var farbeNichtOk = "background:yellow;";
var farbeOk = "background:lime;";
! var idFarbeBadFenster = dpPfad + 'Farbe_Fenster_Bad';
var idFarbeBadLueften = dpPfad + 'Farbe_Lueften_Bad';
var idLueftenBad = "javascript.0.Raumklima.Raum.Bad.Lüftungsempfehlung";
var idFensterOffenBad = "hm-rpc.0.KEQ099999.1.STATE"/Fenster Bad.STATE/;
var idHystereseBad = "javascript.0.Raumklima.Raum.Bad.DETAILS_Lüftungsempfehlung.Lüften_Hysterese"/Logik im Bereich der Hysterese. Keine Änderung der bestehenden Lüftungsempfehlung./;
! var idFarbeSchlafzimmerFenster = dpPfad + 'Farbe_Fenster_Schlafzimmer';
var idFarbeSchlafzimmerLueften = dpPfad + 'Farbe_Lueften_Schlafzimmer';
var idLueftenSchlafzimmer = "javascript.0.Raumklima.Raum.Schlafzimmer.Lüftungsempfehlung"/Lüftungsempfehlung/;
var idFensterOffenSchlafzimmer = "hm-rpc.0.LEQ199999.1.STATE"/Fenster Schlafzimmer.STATE/;
var idHystereseSchlafzimmer = "javascript.0.Raumklima.Raum.Schlafzimmer.DETAILS_Lüftungsempfehlung.Lüften_Hysterese";
! var idFarbeGaestebadTuer = dpPfad + 'Farbe_Tür_Gästebad';
var idFarbeGaestebadLueften = dpPfad + 'Farbe_Lueften_Gästebad';
var idLueftenGaestebad = "javascript.0.Raumklima.Raum.Gästebad.Lüftungsempfehlung"/Lüftungsempfehlung/;
var idTuerOffenGaestebad = "hm-rpc.0.KEQ099999.1.STATE"/Tür Gästebad.STATE/;
var idHystereseGaestebad = "javascript.0.Raumklima.Raum.Gästebad.DETAILS_Lüftungsempfehlung.Lüften_Hysterese"/Logik im Bereich der Hysterese. Keine Änderung der bestehenden Lüftungsempfehlung./;
! var idFarbeKatharinaFenster = dpPfad + 'Farbe_Fenster_Katharina';
var idFarbeKatharinaLueften = dpPfad + 'Farbe_Lueften_Katharina';
var idLueftenKatharina = "javascript.0.Raumklima.Raum.Katharina.Lüftungsempfehlung"/Lüftungsempfehlung/;
var idFensterKatharina = "hm-rpc.0.MEQ199999.1.STATE"/Fenster Katharina/;
var idHystereseKatharina = "javascript.0.Raumklima.Raum.Katharina.DETAILS_Lüftungsempfehlung.Lüften_Hysterese"/Logik im Bereich der Hysterese. Keine Änderung der bestehenden Lüftungsempfehlung./;
! // =============================================================================
// Datenpunkte anlegen
// =============================================================================
function dpAnlegen() {
! // einfach angelegte Datenpunkte
// -----------------------------
//createState(dpPfad + 'datenpunktName',"Test");
! // ausführlich beschriebene Datenpunkte
// ------------------------------------
! createState(idFarbeBadFenster, farbeInit, {
name: 'Farbe Fenster Bad',
desc: 'Farbliche Darstellung Badezimmerfenster in Abhängigkeit der Lüftungslogik',
type: 'string',
unit: ''
});
! createState(idFarbeSchlafzimmerFenster, farbeInit, {
name: 'Farbe Fenster Schlafzimmer',
desc: 'Farbliche Darstellung Schlafzimmerzimmerfenster in Abhängigkeit der Lüftungslogik',
type: 'string',
unit: ''
});
! createState(idFarbeGaestebadTuer, farbeInit, {
name: 'Farbe Tür Gästebad',
desc: 'Farbliche Darstellung Gästebadtür in Abhängigkeit der Lüftungslogik',
type: 'string',
unit: ''
});
! createState(idFarbeKatharinaFenster, farbeInit, {
name: 'Farbe Fenster Katharina',
desc: 'Farbliche Darstellung Fenster Katharina in Abhängigkeit der Lüftungslogik',
type: 'string',
unit: ''
});
! createState(idFarbeSchlafzimmerLueften, farbeInit, {
name: 'Farbe Lüften Schlafzimmer',
desc: 'Farbliche Darstellung Lüftungsempfehlung im Schlafzimmer in Abhängigkeit der Lüftungslogik und Fensterstellung',
type: 'string',
unit: ''
});
! createState(idFarbeBadLueften, farbeInit, {
name: 'Farbe Lüften Bad',
desc: 'Farbliche Darstellung Lüftungsempfehlung im Bad in Abhängigkeit der Lüftungslogik und Fensterstellung',
type: 'string',
unit: ''
});
! createState(idFarbeGaestebadLueften, farbeInit, {
name: 'Farbe Lüften Gästebad',
desc: 'Farbliche Darstellung Lüftungsempfehlung im Gästebad in Abhängigkeit der Lüftungslogik und Fensterstellung',
type: 'string',
unit: ''
});
! createState(idFarbeKatharinaLueften, farbeInit, {
name: 'Farbe Lüften Katharina',
desc: 'Farbliche Darstellung Lüftungsempfehlung im Katharina in Abhängigkeit der Lüftungslogik und Fensterstellung',
type: 'string',
unit: ''
});}
! // -----------------------------------------------------------------------------
// Funktionen Funktionen
// -----------------------------------------------------------------------------
! function setFarbe(idLueften,idOffen,idFarbeFenster,idHysterese,idFarbeLueften) {
var lueften = getState(idLueften).val;
var offen = getState(idOffen).val;
var farbe = farbeNichtOk;var logikOK = ((lueften && offen) || (!lueften && !offen ) ? true : false); // true: optimaler Zustand
! if(idHysterese) {
var hysterese = getState(idHysterese).val;
if (hysterese) {
logikOK = true;
}
}
! if(logikOK) farbe = farbeOk;
setState(idFarbeFenster,farbe); // Farbformatioerung schreiben
if(idFarbeLueften) {
setState(idFarbeLueften,farbe); // Farbformatioerung schreiben
}
if(debug) log("idLueften: " + idLueften);
if(debug) log("Lüften: " + lueften + " - offen: " + offen + " - farbe: " + farbe + " - logikOK: " + logikOK);
if(debug) log("--------------");
return logikOK; // falls benötigt, Ergebnis der Prüfung
}
! // -----------------------------------------------------------------------------
// Schedule Schedule
// -----------------------------------------------------------------------------
function onAnlegen() {
! /*
// wird um 00:00 ausgeführt
schedule({hour: 0, minute: 0}, function (){
// was soll passieren
});
*/
! // -----------------------------------------------------------------------------
// ON ON
// -----------------------------------------------------------------------------
! // Fenster Bad
on({id: idLueftenBad,change:'ne'}, function (obj) {
setFarbe(idLueftenBad,idFensterOffenBad,idFarbeBadFenster,idHystereseBad,idFarbeBadLueften);
});
! on({id: idFensterOffenBad ,change:'ne'}, function (obj) {
setFarbe(idLueftenBad,idFensterOffenBad,idFarbeBadFenster,idHystereseBad,idFarbeBadLueften);
});
! on({id: idHystereseBad ,change:'ne'}, function (obj) {
setFarbe(idLueftenBad,idFensterOffenBad,idFarbeBadFenster,idHystereseBad,idFarbeBadLueften);
});
! // Fenster Schlafzimmer
on({id: idLueftenSchlafzimmer,change:'ne'}, function (obj) {
setFarbe(idLueftenSchlafzimmer,idFensterOffenSchlafzimmer,idFarbeSchlafzimmerFenster,idHystereseSchlafzimmer,idFarbeSchlafzimmerLueften);
});
! on({id: idFensterOffenSchlafzimmer ,change:'ne'}, function (obj) {
setFarbe(idLueftenSchlafzimmer,idFensterOffenSchlafzimmer,idFarbeSchlafzimmerFenster,idHystereseSchlafzimmer,idFarbeSchlafzimmerLueften);
});
! on({id: idHystereseSchlafzimmer ,change:'ne'}, function (obj) {
setFarbe(idLueftenSchlafzimmer,idFensterOffenSchlafzimmer,idFarbeSchlafzimmerFenster,idHystereseSchlafzimmer,idFarbeSchlafzimmerLueften);
});
! // Tür Gästebad
on({id: idLueftenGaestebad,change:'ne'}, function (obj) {
setFarbe(idLueftenGaestebad,idTuerOffenGaestebad,idFarbeGaestebadTuer,idHystereseGaestebad,idFarbeGaestebadLueften);
});
! on({id: idTuerOffenGaestebad ,change:'ne'}, function (obj) {
setFarbe(idLueftenGaestebad,idTuerOffenGaestebad,idFarbeGaestebadTuer,idHystereseGaestebad,idFarbeGaestebadLueften);
});
! on({id: idHystereseGaestebad ,change:'ne'}, function (obj) {
setFarbe(idLueftenGaestebad,idTuerOffenGaestebad,idFarbeGaestebadTuer,idHystereseGaestebad,idFarbeGaestebadLueften);
});
! // Fenster Katharina
on({id: idLueftenKatharina,change:'ne'}, function (obj) {
setFarbe(idLueftenKatharina,idFensterKatharina,idFarbeKatharinaFenster,idHystereseKatharina,idFarbeKatharinaLueften);
});
! on({id: idFensterKatharina ,change:'ne'}, function (obj) {
setFarbe(idLueftenKatharina,idFensterKatharina,idFarbeKatharinaFenster,idHystereseKatharina,idFarbeKatharinaLueften);
});
! on({id: idHystereseKatharina ,change:'ne'}, function (obj) {
setFarbe(idLueftenKatharina,idFensterKatharina,idFarbeKatharinaFenster,idHystereseKatharina,idFarbeKatharinaLueften);
});
! }
! // =============================================================================
// main - Hauptprogramm (wird beim Scriptstart ausgeführt) main
// =============================================================================
function main() {
! // Hauptprogramm nach Timeout (z.B. damit neu angelegte Datenpunkte vorhanden sind)
// Im Hauptprogramm weiter:
setFarbe(idLueftenBad ,idFensterOffenBad,idFarbeBadFenster,idHystereseBad,idFarbeBadLueften);
setFarbe(idLueftenSchlafzimmer,idFensterOffenSchlafzimmer,idFarbeSchlafzimmerFenster,idHystereseSchlafzimmer,idFarbeSchlafzimmerLueften);
setFarbe(idLueftenGaestebad,idTuerOffenGaestebad,idFarbeGaestebadTuer,idHystereseGaestebad,idFarbeGaestebadLueften);
setFarbe(idLueftenKatharina,idFensterKatharina,idFarbeKatharinaFenster,idHystereseKatharina,idFarbeKatharinaLueften);
! }
dpAnlegen(); // erst die notwendigen Datenpunkte anlegen
setTimeout(onAnlegen, 500); // dann die Subscriptions setzen
setTimeout(main, 1000); // dann das Hauptprogramm starten
! ```` -
Das sind zig kleine Skripte. Ich kann gerne hier ein paar Beispiele ablegen.
[…]
usw. usw.
Das sind recht viele und individuelle Abfragen.
Wenn Du aus der Übersicht was gebrauchen kannst, dann kann ich das gezielt posten.
Alles wäre etwas viel… `
Nun hab ich mir die Skripte die du hier gepostet hattest mal zu Gemüte geführt und diese auch alle übernommen. In der Tat würde mich aber noch folgende Skripte interessieren:
1. Abfrageskript um die Prozessor+RAM Auslastung des Hosts zu ermitteln inkl. Anzahl der Linux Updates, etc. (ist in der Box "ubuntu1604server" zu sehen.
2. Skript zur Ermittlung der Anzahl der Servicemeldungen, Alarme, UNRECH, LOWBAT Meldungen der CCU2
3. Skript zur Ermittlung des Status der hue Bridge usw.
4. Skript zur Ermittlung des Status deiner Diskstation DS1512+ (hab das gleiche Teil
5. Skript zur Ermittlung des Status des WIFFI-wz
Und zu guter letzt wäre es noch schön du könntest den gesamten VIS-View deiner Systeminfos mal exportieren und hier zur Verfügung stellen damit ich mir die Darstellung des selben etwas besser abkupfern kann
Vielen Dank natürlich schon einmal im Voraus!
-
Hallo, Jens. Bekommst Du. Wird allerdings Sonntag werden. Vorab:
1. am Sonntag
2. findest Du auch hier im Forum (nicht von mir). Ansonsten Sonntag
3. kommt Sonntag, inkl. dem Part, der die aktuell im Internet verfügbare Version abfragt und mit dem Ist-Stand vergleicht
4. ist ein Skript auf der DS. Auch hier aus dem Forum. Den Part in ioBroker muss ich neu machen. Will da mehr Infos visualisieren. Im VIS View siehst Du, dass auch gerade die wenigen Infos leer bleiben, da ich da schon angefangen hatte.
5. findest Du auch hier imForum. Ansonsten auch am Sonntag
Viel Arbeit. Habe aber viel dabei gelernt und man macht es nur einmal.
Wir scheinen ja fast die identische Ausstattung zu haben. Bei der CCU habe ich von Kassel im Kopf, dass Du aktiv bei einer Softwarelösung mitarbeitest. Das wäre auch mal ein Thema für mich von der CCU2 wegzukommen;-)
Gesendet von iPhone mit Tapatalk
-
Hallo, Jens. Bekommst Du. Wird allerdings Sonntag werden. `
OK, dann warte ich mal auf Sonntag. Allerdings war ich selbst auch nicht ganz untätig und hab mal kurzerhand dein Skript zur Generierung dieser "javascript.0.Visualisierung…" Datenpunkte umgeschrieben damit man dort am Anfang einfach nur eine Tabelle aller Räume angeben muss. Des Weiteren kann man jetzt mehr als nur ein Fenster bzw. beliebig viele Verschlüsse angeben:
! ````
var debug = false;
! var dpPfad = "Visualisierung.Fenster" + "."; // In welchem Pfad sollen die Datenpunkte angelegt werden. String mit "." am Ende.
var instanz = "javascript." + instance + ".";
! var farbeInit = "background:rgb(204, 204, 204);";
var farbeNichtOk = "background:yellow;";
var farbeOk = "background:lime;";
! var raumliste = {
"Badezimmer" : {
"verschluss1": "hm-rpc.0.MEQXXXXXX.1.STATE"/Fenster-BZ.STATE/
},
"Kinderzimmer" : {
"verschluss1": "hm-rpc.0.MEQXXXXXX.1.STATE"/Fenster-KZ-Links.STATE/,
"verschluss2": "hm-rpc.0.MEQXXXXXX.1.STATE"/Fenster-KZ-Rechts.STATE/
},
"Schlafzimmer" : {
"verschluss1": "hm-rpc.0.MEQXXXXXX.1.STATE"/Fenster-SZ-Links.STATE/,
"verschluss2": "hm-rpc.0.MEQXXXXXX.1.STATE"/Fenster-SZ-Rechts.STATE/
},
"Gästezimmer" : {
"verschluss1": "hm-rpc.0.MEQXXXXXX.1.STATE"/Fenster-GZ-Links.STATE/,
"verschluss2": "hm-rpc.0.MEQXXXXXX.1.STATE"/Fenster-GZ-Rechts.STATE/
},
"Wohnzimmer" : {
"verschluss1": "hm-rpc.0.MEQXXXXXX.1.STATE"/Fenster-WZ-Links.STATE/,
"verschluss2": "hm-rpc.0.MEQXXXXXX.1.STATE"/Fenster-WZ-Rechts.STATE/,
"verschluss3": "hm-rpc.0.LEQXXXXXX.1.STATE"/Terassentür-WZ.STATE/,
"verschluss4": "hm-rpc.0.MEQXXXXXX.1.STATE"/Fenster-AZ.STATE/
},
"Küche" : {
"verschluss1": "hm-rpc.0.MEQXXXXXX.1.STATE"/Fenster-Kü.STATE/,
"verschluss2": "hm-rpc.0.LEQXXXXXX.1.STATE"/Terassentür-Kü.STATE/
},
"WC-EG" : {
"verschluss1": "hm-rpc.0.MEQXXXXXX.1.STATE"/Fenster-WC-EG.STATE/
},
"HWR" : {
"verschluss1": "hm-rpc.0.MEQXXXXXXX.1.STATE"/Fenster-HWR.STATE/
}
};
! // =============================================================================
// Datenpunkte anlegen
// =============================================================================
function dpAnlegen() {
! // Datenpunkte anhand der Raumliste anlegen lassen
for (var raum in raumliste) {
createState(dpPfad + 'Farbe_Fenster_' + raum, farbeInit, {
name: 'Farbe Fenster ' + raum,
desc: 'Farbliche Darstellung ' + raum + '-Fenster in Abhängigkeit der Lüftungslogik',
type: 'string',
unit: ''
});
createState(dpPfad + 'Farbe_Lueften_' + raum, farbeInit, {
name: 'Farbe Lüften ' + raum,
desc: 'Farbliche Darstellung Lüftungsempfehlung im ' + raum + ' in Abhängigkeit der Lüftungslogik und Fensterstellung',
type: 'string',
unit: ''
});
}
}
! // -----------------------------------------------------------------------------
// Funktionen Funktionen
// -----------------------------------------------------------------------------
! function setFarbe(raumName) {var raum = raumliste[raumName]; var lueften = getState("javascript.0.Raumklima.Raum." + raumName + ".Lüftungsempfehlung").val; var offen; var farbe = farbeNichtOk; // kontrollieren ob ein Fenster offen ist var i=1; var verschluss; while((verschluss = raum['verschluss' + i])) { if(getState(verschluss).val) { offen = true; break; } i++; } var logikOK = ((lueften && offen) || (!lueften && !offen ) ? true : false); // true: optimaler Zustand
! var hysterese = getState("javascript.0.Raumklima.Raum." + raumName + ".DETAILS_Lüftungsempfehlung.Lüften_Hysterese").val;
if (hysterese) {
logikOK = true;
}
! if(logikOK) farbe = farbeOk;// Farbformatierung schreiben setState(dpPfad + 'Farbe_Fenster_' + raumName, farbe); setState(dpPfad + 'Farbe_Lueften_' + raumName, farbe); if(debug) log("idLueften: " + "javascript.0.Raumklima.Raum." + raumName + ".Lüftungsempfehlung"); if(debug) log("Lüften: " + lueften + " - offen: " + offen + " - farbe: " + farbe + " - logikOK: " + logikOK); if(debug) log("--------------"); // falls benötigt, Ergebnis der Prüfung return logikOK;
}
! // -----------------------------------------------------------------------------
// Schedule Schedule
// -----------------------------------------------------------------------------
function onAnlegen() {
! // Subscriptions anlegen
for (var raum in raumliste) {// subscription für Lüftungsempfehlung-Änderungen anlegen on({id: "javascript.0.Raumklima.Raum." + raum + ".Lüftungsempfehlung", change:'ne'}, function (obj) { setFarbe(raum); });
! // subscription für Hysterese-Änderungen anlegen
on({id: "javascript.0.Raumklima.Raum." + raum + ".DETAILS_Lüftungsempfehlung.Lüften_Hysterese", change:'ne'}, function (obj) {
setFarbe(raum);
});// eine subscription für jedes fenster anlegen var i=1; var idVerschluss; while((idVerschluss = raum['verschluss' + i])) { on({id: idVerschluss, change:'ne'}, function (obj) { setFarbe(raum); }); i++; } }
! log("Subscriptions angelegt");
}
! // =============================================================================
// main - Hauptprogramm (wird beim Scriptstart ausgeführt) main
// =============================================================================
function main() {
! // Hauptprogramm nach Timeout (z.B. damit neu angelegte Datenpunkte vorhanden sind)
// Im Hauptprogramm weiter:
for (var raum in raumliste) {
setFarbe(raum);
}
}
dpAnlegen(); // erst die notwendigen Datenpunkte anlegen
onAnlegen(); // dann die Subscriptions setzen
setTimeout(main, 1000); // dann das Hauptprogramm starten
! ````Vielleicht ist diese leichte Verbesserung ja auch für dich nützlich und du willst sie übernehmen. So ist der Skript auf jedenfall viel besser wattbar, finde ich.