Dom Update refresh take to long



  • Hello everybody!

    I have written my own module to get infos from an xml-api for my homematic home.

    The modules works fine. I want to refresh the info every 3 seconds. I have some static info and the answer from xml. Now by the updatedom the static content should stay on the mirror and only the xml-response should reload / replaced.

    How can i optimized this script to get its better working:

    /* Magic Mirror
     * Module: homematic
     *
     * By Marc Thomas marc.malus@gmail.com
     * MIT Licensed.
     */
    
    Module.register("homematic",{
    
            defaults: {
    			text: "Homematic Modul"
            },
    
            getDom: function() {
    
    			function get_status(id, typ) {
    				var xml_abruf = new XMLHttpRequest();
    				xml_abruf.open("GET", "http://homematic/config/xmlapi/state.cgi?datapoint_id=" + id, true);
    				xml_abruf.send();
    					xml_abruf.onreadystatechange = function() {
    						if (this.readyState == 4 && this.status == 200) {
    						xml_auswerten(this, id, typ);
    						}
    					}
    			}
    
    			function xml_auswerten(xml, id, typ) {
    				var xmlDoc = xml.responseXML;
    				var x = xmlDoc.getElementsByTagName('datapoint')[0];
    				var y = x.getAttributeNode("value");
    				var status = '';
    
    				switch (typ)
    				{
    				case 'schalter':
    					if (y.nodeValue == 'true')
    						status = "<img src="\" />";
    					else
    						status = "<img src="\" />";
    					break;
    				case 'dimmer':
    					if ((y.nodeValue * 1) > 0)
    						status = "<img src="\" />";
    					else
    						status = "<img src="\" />";
    					break;
    				case 'steckdose':
    					if (y.nodeValue == 'true')
    						status = "<img src="\" />";
    					else
    						status = "<img src="\" />";
    					break;
    				case 'tuer':
    					if (y.nodeValue == 'true')
    						status = "offen";
    					else
    						status = "zu";
    					break;
    				case 'heizungsgruppe':
    					status = y.nodeValue * 1
    					break;
    				}
    
    
    				switch (id)
    				{
    				case 10380:
    					document.getElementById("wohnzimmer_licht_bezeichner").innerHTML = "Wohnzimmer Licht:";
    					document.getElementById("wohnzimmer_licht_bezeichner").style.float = "left";
    					document.getElementById("wohnzimmer_licht_bezeichner").style.width = "94%";
    					document.getElementById("wohnzimmer_licht").innerHTML = status;
    					document.getElementById("wohnzimmer_licht").style.float = "left";
    					document.getElementById("wohnzimmer_licht").style.width = "6%";
    					document.getElementById("wohnzimmer_licht").style.textAlign = "center";
    					break;
    				case 3786:
    					document.getElementById("schlafzimmer_licht_bezeichner").innerHTML = "Schlafzimmer Licht:";
    					document.getElementById("schlafzimmer_licht_bezeichner").style.float = "left";
    					document.getElementById("schlafzimmer_licht_bezeichner").style.width = "94%";
    					document.getElementById("schlafzimmer_licht").innerHTML = status;
    					document.getElementById("schlafzimmer_licht").style.float = "left";
    					document.getElementById("schlafzimmer_licht").style.width = "6%";
    					break;
    				case 4375:
    					document.getElementById("schlafzimmer_heizungsgruppe_bezeichner").innerHTML = "Schlafzimmer:";
    					document.getElementById("schlafzimmer_heizungsgruppe_bezeichner").style.float = "left";
    					document.getElementById("schlafzimmer_heizungsgruppe_bezeichner").style.width = "94%";
    					document.getElementById("schlafzimmer_heizungsgruppe").innerHTML = status.toFixed(1) + "°C";
    					document.getElementById("schlafzimmer_heizungsgruppe").style.float = "left";
    					document.getElementById("schlafzimmer_heizungsgruppe").style.width = "6%";
    					break;
    				case 4217:
    					document.getElementById("wohnzimmer_heizungsgruppe_bezeichner").innerHTML = "Wohnzimmer:";
    					document.getElementById("wohnzimmer_heizungsgruppe_bezeichner").style.float = "left";
    					document.getElementById("wohnzimmer_heizungsgruppe_bezeichner").style.width = "94%";
    					document.getElementById("wohnzimmer_heizungsgruppe").innerHTML = status.toFixed(1) + "°C";
    					document.getElementById("wohnzimmer_heizungsgruppe").style.float = "left";
    					document.getElementById("wohnzimmer_heizungsgruppe").style.width = "6%";
    					break;
    				case 8604:
    					document.getElementById("kueche_kaffeemaschine_bezeichner").innerHTML = "Kaffeemaschine:";
    					document.getElementById("kueche_kaffeemaschine_bezeichner").style.float = "left";
    					document.getElementById("kueche_kaffeemaschine_bezeichner").style.width = "94%";
    					document.getElementById("kueche_kaffeemaschine").innerHTML = status;
    					document.getElementById("kueche_kaffeemaschine").style.float = "left";
    					document.getElementById("kueche_kaffeemaschine").style.width = "6%";
    					break;
    				case 1783:
    					document.getElementById("wohnzimmer_beamermodus_bezeichner").innerHTML = "Beamermodus:";
    					document.getElementById("wohnzimmer_beamermodus_bezeichner").style.float = "left";
    					document.getElementById("wohnzimmer_beamermodus_bezeichner").style.width = "94%";
    					document.getElementById("wohnzimmer_beamermodus").innerHTML = status;
    					document.getElementById("wohnzimmer_beamermodus").style.float = "left";
    					document.getElementById("wohnzimmer_beamermodus").style.width = "6%";
    					break;
    				case 3031:
    					document.getElementById("wohnungstuer_bezeichner").innerHTML = "Wohnungstür:";
    					document.getElementById("wohnungstuer_bezeichner").style.float = "left";
    					document.getElementById("wohnungstuer_bezeichner").style.width = "94%";
    					document.getElementById("wohnungstuer").innerHTML = status;
    					document.getElementById("wohnungstuer").style.float = "left";
    					document.getElementById("wohnungstuer").style.width = "6%";
    					break;
    				}
    			}
    
    			
    			
    			var wrapper = document.createElement("div");
    			
    			var wohnzimmer_licht_bezeichner = document.createElement("div");
                wohnzimmer_licht_bezeichner.setAttribute('id', 'wohnzimmer_licht_bezeichner');
                wrapper.appendChild(wohnzimmer_licht_bezeichner);
    			
                var wohnzimmer_licht = document.createElement("div");
                wohnzimmer_licht.setAttribute('id', 'wohnzimmer_licht');
                wrapper.appendChild(wohnzimmer_licht);
    
    			
                var wohnzimmer_heizungsgruppe_bezeichner = document.createElement("div");
                wohnzimmer_heizungsgruppe_bezeichner.setAttribute('id', 'wohnzimmer_heizungsgruppe_bezeichner');
                wrapper.appendChild(wohnzimmer_heizungsgruppe_bezeichner);
    			
                var wohnzimmer_heizungsgruppe = document.createElement("div");
                wohnzimmer_heizungsgruppe.setAttribute('id', 'wohnzimmer_heizungsgruppe');
                wrapper.appendChild(wohnzimmer_heizungsgruppe);
    
    			
    			var schlafzimmer_licht_bezeichner = document.createElement("div");
    			schlafzimmer_licht_bezeichner.setAttribute('id', 'schlafzimmer_licht_bezeichner');
    			wrapper.appendChild(schlafzimmer_licht_bezeichner);
    
    			var schlafzimmer_licht = document.createElement("div");
    			schlafzimmer_licht.setAttribute('id', 'schlafzimmer_licht');
    			wrapper.appendChild(schlafzimmer_licht);
    
    			
                var schlafzimmer_heizungsgruppe_bezeichner = document.createElement("div");
                schlafzimmer_heizungsgruppe_bezeichner.setAttribute('id', 'schlafzimmer_heizungsgruppe_bezeichner');
                wrapper.appendChild(schlafzimmer_heizungsgruppe_bezeichner);
    			
                var schlafzimmer_heizungsgruppe = document.createElement("div");
                schlafzimmer_heizungsgruppe.setAttribute('id', 'schlafzimmer_heizungsgruppe');
                wrapper.appendChild(schlafzimmer_heizungsgruppe);
    
    			
                var kueche_kaffeemaschine_bezeichner = document.createElement("div");
                kueche_kaffeemaschine_bezeichner.setAttribute('id', 'kueche_kaffeemaschine_bezeichner');
                wrapper.appendChild(kueche_kaffeemaschine_bezeichner);
    
                var kueche_kaffeemaschine = document.createElement("div");
                kueche_kaffeemaschine.setAttribute('id', 'kueche_kaffeemaschine');
                wrapper.appendChild(kueche_kaffeemaschine);
    
    
    			var wohnzimmer_beamermodus_bezeichner = document.createElement("div");
    			wohnzimmer_beamermodus_bezeichner.setAttribute('id', 'wohnzimmer_beamermodus_bezeichner');
    			wrapper.appendChild(wohnzimmer_beamermodus_bezeichner);
    			
    			var wohnzimmer_beamermodus = document.createElement("div");
    			wohnzimmer_beamermodus.setAttribute('id', 'wohnzimmer_beamermodus');
    			wrapper.appendChild(wohnzimmer_beamermodus);
    			
    			
    			var wohnungstuer_bezeichner = document.createElement("div");
    			wohnungstuer_bezeichner.setAttribute('id', 'wohnungstuer_bezeichner');
    			wrapper.appendChild(wohnungstuer_bezeichner);
    			
    			var wohnungstuer = document.createElement("div");
    			wohnungstuer.setAttribute('id', 'wohnungstuer');
    			wrapper.appendChild(wohnungstuer);
    			
    			get_status(10380, 'schalter'); //wohnzimmer_licht
    			get_status(3786, 'dimmer'); //schlafzimmer_dimmer
    			get_status(4375, 'heizungsgruppe'); //schlafzimmer_heizungsgruppe
    			get_status(4217, 'heizungsgruppe'); //wohnzimmer_heizungsgruppe
    			get_status(8604, 'steckdose'); //kueche_kaffeemaschine
    			get_status(1783, 'steckdose'); //wohnzimmer_beamermodus
    			get_status(3031,'tuer'); //wohnungstuer
    
    			setInterval(function() {
    				get_status(3786, 'dimmer');
    			}, 100); //1000 Millisekunden = 1 Sekunde
    			*/
    
                            return wrapper;
    
            },
    
    	start: function() {
    		var self = this;
    		setInterval(function() {
    			self.updateDom();
    			}, 3 * 1000); //1000 Millisekunden = 1 Sekunde
    	}
    });
    
    

Log in to reply
 

Looks like your connection to MagicMirror Forum was lost, please wait while we try to reconnect.