Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. HowTo: Zusatz-Programme fuer jarvis v3

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    HowTo: Zusatz-Programme fuer jarvis v3

    This topic has been deleted. Only users with topic management privileges can see it.
    • U
      uwe72 @MCU last edited by

      @mcu ja, habe ich nun angepasst, und oben Screenshot ausgetauscht

      M 1 Reply Last reply Reply Quote 0
      • M
        MCU @uwe72 last edited by MCU

        @uwe72 Jetzt mal ins LOG F12 schauen

        console.log() aktivieren -> // davor entfernen

        U 1 Reply Last reply Reply Quote 0
        • U
          uwe72 @MCU last edited by

          @mcu said in HowTo: Zusatz-Programme fuer jarvis v3:

          @uwe72 Jetzt mal ins LOG F12 schauen

          console.log() aktivieren -> // davor entfernen

          772d3327-913f-4a75-8cba-a860cb6e522e-image.png

          U 1 Reply Last reply Reply Quote 0
          • U
            uwe72 @uwe72 last edited by

            hab noch nicht alle log-Ausgaben einkommentiert

            M 2 Replies Last reply Reply Quote 0
            • M
              MCU @uwe72 last edited by

              @uwe72 Mache gerade neue Version

              1 Reply Last reply Reply Quote 1
              • M
                MCU @uwe72 last edited by MCU

                @uwe72 Dies sollte jetzt mit der neuen Version im LOG erscheinen

                6d30e177-3add-4777-9139-e9222f67bd96-image.png

                Du kannst jetzt WidgetId und item weglassen, wenn du dort keine Änderung haben willst

                U 1 Reply Last reply Reply Quote 0
                • U
                  uwe72 @MCU last edited by

                  @mcu babb2cc1-f61f-40d9-b9a1-f4f4ac249cdb-image.png

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    MCU @uwe72 last edited by MCU

                    @uwe72 Was steht jetzt im Objekt vom widgetArr?

                    Einmal die Zeile let dp = -> // deaktivieren
                    2476f030-8b9d-4d55-a0d7-44bdefcee8fc-image.png
                    Bei Dir Zeile 54

                    U 1 Reply Last reply Reply Quote 0
                    • U
                      uwe72 @MCU last edited by

                      @mcu

                      ich starte nun mal so:

                      // ***************************
                      // stateListLabelChange v1.0.3
                      // ***************************
                      // Copyright ©MCU
                      // v1.0.1 - Korrektur Tabwechsel
                      // v1.0.2 - für Device-Popup erweitert
                      // v1.0.3 - Widget oder Device optional, Logging Test
                      
                      let widgetArr = [
                      					{
                      						dp:'0_userdata.0.DP.dp1',
                      						deviceId: 'device_HG015',
                      						deviceItem: 2
                      					}
                      				]
                      
                      let loggingSLLC = true;
                      
                      let valueSLLCObj = {}
                      
                      docReady(function() {
                      	if (isConfig()){
                      	}else{
                      		console.log('%cStart stateListLabelChange.js','color:yellow;');
                      		setTimeout(function(){
                      			setSubscriptionDPs(widgetArr)
                      		},100)
                      		document.addEventListener("click", function (event) {
                      			if (isConfig()){
                      			}else{
                      				console.log('%cKlick stateListLabelChange','color:orange');
                      				setTimeout(function(){
                      					
                      					for(let i=0;i<widgetArr.length;i++){
                      						if(valueSLLCObj[widgetArr[i].dp]){
                      							if(widgetArr[i].widgetId && widgetArr[i].item != undefined){
                      								changeLabel(widgetArr[i].widgetId, widgetArr[i].item, valueSLLCObj[widgetArr[i].dp])
                      							}
                      							setTimeout(function(){
                      								if(widgetArr[i].deviceId && widgetArr[i].deviceItem != undefined){
                      									changeLabelPopup(widgetArr[i].deviceId, widgetArr[i].deviceItem, valueSLLCObj[widgetArr[i].dp] )
                      								}
                      							},500)
                      						}
                      					}
                      				},100)
                      			}
                      		});
                      	}
                      });
                      
                      function setSubscriptionDPs(arr){
                      	for(let obj in arr){
                      		console.log(arr[dp])
                      		//let dp = Object.keys(arr[obj])[0]
                      		 console.log(dp)
                      		window.Socket.subscribeState(arr[obj].dp, ({ err, state }) => {
                      			valueSLLCObj[arr[obj].dp] = state.val;
                      			if(arr[obj].widgetId && arr[obj].item!= undefined){
                      				changeLabel(arr[obj].widgetId, arr[obj].item,state.val )
                      			}
                      			if(arr[obj].deviceId && arr[obj].deviceItem!= undefined){
                      				changeLabelPopup(arr[obj].deviceId,arr[obj].deviceItem, state.val)
                      			}
                      		});
                      		
                      	}
                      }
                      
                      
                      
                      function changeLabel(widgetId,item, txt){
                      	console.log('WidgetId: '+widgetId + ' Item: '+item )
                      	let doc = document.getElementsByClassName('jarvis-widget-'+widgetId);
                      	let dpVal;
                      	console.log('ChangeLabel')
                      	if(doc.length>0){
                      		let stateList = doc[0].getElementsByClassName('jarvis-StateList');
                      		if(stateList.length > 0){
                      			let slItems = stateList[0].getElementsByClassName('jarvis-StateListItem');
                      			if(slItems.length >0){
                      				let slBody = slItems[item].getElementsByClassName('jarvis-StateListItem-Body')
                      				if(slBody.length > 0){
                      					console.log('gefunden ')
                      					let slLabel = slBody[0].getElementsByClassName('q-item__label')
                      					console.log(slLabel)
                      					slLabel[0].innerHTML = txt
                      				}
                      			}
                      			
                      		}
                      	}
                      }
                      
                      function changeLabelPopup(deviceId, deviceItem, txt){
                      	console.log('ChangeLabelDevicePopup')
                      	let doc = document.getElementsByClassName('jarvis-device-'+deviceId);
                      	if(doc.length >0){
                      		if(loggingSLLC) console.log('Device gefunden')
                      		let popup = doc[0].getElementsByClassName('jarvis-popup')
                      		if(popup.length>0){
                      			if(loggingSLLC) console.log('Popup gefunden')
                      			let deviceItems = popup[0].getElementsByClassName('jarvis-StateListItem-Popup')
                      			if(loggingSLLC) console.log(deviceItems)
                      			let device = deviceItems[deviceItem]
                      			if(loggingSLLC) console.log(device)
                      			let body = device.getElementsByClassName('jarvis-StateListItem-Body')
                      			if(body.length >0){
                      				if(loggingSLLC) console.log('Body gefunden')
                      				let label = body[0].getElementsByClassName('q-item__label')
                      				label[0].innerHTML = txt
                      			}
                      		}
                      	}
                      }
                      
                      
                      
                      
                      function isConfig(){
                      	console.log(document.baseURI);
                      	if (document.baseURI.indexOf('configuration') >=0){
                      		console.log('Konfig aktiv');
                      		return true;
                      		
                      	}else{
                      		console.log('Konfig nicht aktiv');
                      		return false;		
                      	}
                      }
                      
                      function docReady(fn) {
                          // see if DOM is already available
                          if (document.readyState === "complete" || document.readyState === "interactive") {
                              // call on next available tick
                              setTimeout(fn, 1000);
                          } else {
                              document.addEventListener("DOMContentLoaded", fn);
                          }
                      }
                      
                      M 1 Reply Last reply Reply Quote 1
                      • M
                        MCU @uwe72 last edited by

                        @uwe72 Passt,

                        //console.log(arr[dp])
                        		//let dp = Object.keys(arr[obj])[0]
                        //		 console.log(dp)
                        

                        Die beiden console.log auch deaktivieren

                        U 1 Reply Last reply Reply Quote 0
                        • U
                          uwe72 @MCU last edited by

                          @mcu

                          // ***************************
                          // stateListLabelChange v1.0.3
                          // ***************************
                          // Copyright ©MCU
                          // v1.0.1 - Korrektur Tabwechsel
                          // v1.0.2 - für Device-Popup erweitert
                          // v1.0.3 - Widget oder Device optional, Logging Test
                          
                          let widgetArr = [
                          					{
                          						dp: '0_userdata.0.DP.dp1',
                          						deviceId: 'device_HG015',
                          						deviceItem: 2
                          					}
                          				]
                          
                          let loggingSLLC = true;
                          
                          let valueSLLCObj = {}
                          
                          docReady(function() {
                          	if (isConfig()){
                          	}else{
                          		console.log('%cStart stateListLabelChange.js','color:yellow;');
                          		setTimeout(function(){
                          			setSubscriptionDPs(widgetArr)
                          		},100)
                          		document.addEventListener("click", function (event) {
                          			if (isConfig()){
                          			}else{
                          				console.log('%cKlick stateListLabelChange','color:orange');
                          				setTimeout(function(){
                          					
                          					for(let i=0;i<widgetArr.length;i++){
                          						if(valueSLLCObj[widgetArr[i].dp]){
                          							if(widgetArr[i].widgetId && widgetArr[i].item != undefined){
                          								changeLabel(widgetArr[i].widgetId, widgetArr[i].item, valueSLLCObj[widgetArr[i].dp])
                          							}
                          							setTimeout(function(){
                          								if(widgetArr[i].deviceId && widgetArr[i].deviceItem != undefined){
                          									changeLabelPopup(widgetArr[i].deviceId, widgetArr[i].deviceItem, valueSLLCObj[widgetArr[i].dp] )
                          								}
                          							},500)
                          						}
                          					}
                          				},100)
                          			}
                          		});
                          	}
                          });
                          
                          function setSubscriptionDPs(arr){
                          	for(let obj in arr){
                          		//console.log(arr[dp])
                          		//let dp = Object.keys(arr[obj])[0]
                          //		 console.log(dp)
                          		window.Socket.subscribeState(arr[obj].dp, ({ err, state }) => {
                          			valueSLLCObj[arr[obj].dp] = state.val;
                          			if(arr[obj].widgetId && arr[obj].item!= undefined){
                          				changeLabel(arr[obj].widgetId, arr[obj].item,state.val )
                          			}
                          			if(arr[obj].deviceId && arr[obj].deviceItem!= undefined){
                          				changeLabelPopup(arr[obj].deviceId,arr[obj].deviceItem, state.val)
                          			}
                          		});
                          		
                          	}
                          }
                          
                          
                          
                          function changeLabel(widgetId,item, txt){
                          	console.log('WidgetId: '+widgetId + ' Item: '+item )
                          	let doc = document.getElementsByClassName('jarvis-widget-'+widgetId);
                          	let dpVal;
                          	console.log('ChangeLabel')
                          	if(doc.length>0){
                          		let stateList = doc[0].getElementsByClassName('jarvis-StateList');
                          		if(stateList.length > 0){
                          			let slItems = stateList[0].getElementsByClassName('jarvis-StateListItem');
                          			if(slItems.length >0){
                          				let slBody = slItems[item].getElementsByClassName('jarvis-StateListItem-Body')
                          				if(slBody.length > 0){
                          					console.log('gefunden ')
                          					let slLabel = slBody[0].getElementsByClassName('q-item__label')
                          					console.log(slLabel)
                          					slLabel[0].innerHTML = txt
                          				}
                          			}
                          			
                          		}
                          	}
                          }
                          
                          function changeLabelPopup(deviceId, deviceItem, txt){
                          	console.log('ChangeLabelDevicePopup')
                          	let doc = document.getElementsByClassName('jarvis-device-'+deviceId);
                          	if(doc.length >0){
                          		if(loggingSLLC) console.log('Device gefunden')
                          		let popup = doc[0].getElementsByClassName('jarvis-popup')
                          		if(popup.length>0){
                          			if(loggingSLLC) console.log('Popup gefunden')
                          			let deviceItems = popup[0].getElementsByClassName('jarvis-StateListItem-Popup')
                          			if(loggingSLLC) console.log(deviceItems)
                          			let device = deviceItems[deviceItem]
                          			if(loggingSLLC) console.log(device)
                          			let body = device.getElementsByClassName('jarvis-StateListItem-Body')
                          			if(body.length >0){
                          				if(loggingSLLC) console.log('Body gefunden')
                          				let label = body[0].getElementsByClassName('q-item__label')
                          				label[0].innerHTML = txt
                          			}
                          		}
                          	}
                          }
                          
                          
                          
                          
                          function isConfig(){
                          	console.log(document.baseURI);
                          	if (document.baseURI.indexOf('configuration') >=0){
                          		console.log('Konfig aktiv');
                          		return true;
                          		
                          	}else{
                          		console.log('Konfig nicht aktiv');
                          		return false;		
                          	}
                          }
                          
                          function docReady(fn) {
                              // see if DOM is already available
                              if (document.readyState === "complete" || document.readyState === "interactive") {
                                  // call on next available tick
                                  setTimeout(fn, 1000);
                              } else {
                                  document.addEventListener("DOMContentLoaded", fn);
                              }
                          }
                          

                          00861089-288a-4847-8548-ebbf3203d9aa-image.png

                          M 1 Reply Last reply Reply Quote 0
                          • M
                            MCU @uwe72 last edited by MCU

                            @uwe72 Du muss Deinen dp eintragen
                            16ae347d-2a3b-4d09-aad4-1b71e124cbb0-image.png
                            deviceItem: 1

                            U 1 Reply Last reply Reply Quote 0
                            • U
                              uwe72 @MCU last edited by

                              @mcu sorry, mein Fehler. hatte ich bei irgendeinem Update überschrieben. Funktioniert nun! D.h. deviceitem müssen die ausgeblendeten nicht mitgezählt werden!?

                              518fc886-1966-4751-866f-a9e2be1e6d51-image.png

                              M 1 Reply Last reply Reply Quote 0
                              • M
                                MCU @uwe72 last edited by

                                @uwe72 Prima, nur die zählen, die man sieht, ab 0.

                                U 1 Reply Last reply Reply Quote 1
                                • U
                                  uwe72 @MCU last edited by

                                  @mcu said in HowTo: Zusatz-Programme fuer jarvis v3:

                                  @uwe72 Prima, nur die zählen, die man sieht, ab 0.

                                  Ganz großen und herzlichen DANK!!

                                  M 1 Reply Last reply Reply Quote 0
                                  • M
                                    MCU @uwe72 last edited by MCU

                                    @uwe72 Du kannst dann das Logging abschalten.

                                    let loggingSLLC = false;
                                    
                                    1 Reply Last reply Reply Quote 1
                                    • M
                                      MCU @intruder7 last edited by

                                      @intruder7 Die ankommenden JSON -> qJSON werden ja jetzt gelogggt. Ich sehe zu den normalen keinen Unterschied. Kannst du mal die qJSON vor dem Fehler vergleichen, mit dem direkt vor dem Fehler. Wenn der Aufbau gleich ist, kann ich es nicht beeinflussen, dann muss irgendwo in influxdb ein Problem vorliegen.
                                      Laufen zu dem Zeitpunkt irgendwelche anderen Abfragen auf die Datenbank?

                                      I 1 Reply Last reply Reply Quote 0
                                      • I
                                        intruder7 @MCU last edited by

                                        @mcu verfolge gerade einen anderen Weg. Ich habe festgestellt dass es manchmal aus irgendwelchen Gründen zu etlichen Anfragen zum selben Widget (also auch DP) innerhalb von Millisekunden kommt. Dies führte zum "aufhängen" von InfluxDB. Ich habe gerade im Skript eChartsHistoryGetData eine Prüfung eingebaut die eine Abfrage an InfluxDb verhindert wenn es das selbe Widget ist und die Zeit zur letzten Abfrage weniger als eine Sekunde ist.
                                        Das lasse ich jetzt mal laufen und will hoffen das es daran gelegen hat.

                                        M 1 Reply Last reply Reply Quote 0
                                        • M
                                          MCU @intruder7 last edited by MCU

                                          @intruder7 Zeig mal bitte, vielleicht baue ich mit ein.

                                          I 1 Reply Last reply Reply Quote 0
                                          • I
                                            intruder7 @MCU last edited by

                                            @mcu
                                            geht bestimmt eleganter 😉

                                            let getDataDP = historyAdaptDP + '.getData';
                                            let lastTime = new Date()
                                            let aktTime = new Date()
                                            let lastWidget = ""
                                            //createStateAsync(queryDPsDP,     {read: true, write: false, name: "Abfrage-DP", desc:"Abfrage-DP", type: "string", role: "", def: "" });
                                            createStateAsync(queryJSONDP, { read: true, write: true, name: "Abfrage-JSON-DP", desc: '{dp:"",type:"",cnt:"",start:"",end:"",adapt:""}', type: "string", role: "text", def: JSON.stringify({}) });
                                            createStateAsync(dataResultDP, { read: true, write: true, name: "Daten-Ergebnis", desc: "Abfrage-Ergebnis", type: "string", role: "", def: JSON.stringify([]) });
                                            
                                            
                                            on({ id: queryJSONDP, change: "any" }, function (obj) {
                                                let value = obj.state.val;
                                                // console.log('Anfrage um: '+ formatDate(new Date(),'DD.MM.YYYY hh:mm:ss') +' für DP '+JSON.parse(value).dp )
                                                aktTime = new Date()
                                                let differenz = (aktTime.getTime() - lastTime.getTime())
                                            
                                                var Seconds_from_T1_to_T2 = differenz / 1000;
                                                var Seconds_Between_Dates = Math.abs(Seconds_from_T1_to_T2);
                                                //console.log('aktTime: ' + aktTime)
                                                //console.log('lastTime: ' + lastTime)
                                            
                                                if (JSON.parse(value).widgetId == lastWidget && Seconds_Between_Dates <= 1) {
                                                    //console.log('gleiches widget und zu häufige Anfrage ')
                                                    //console.log('last widgetId: ' + lastWidget)
                                                    //console.log('akt widgetId: ' + JSON.parse(value).widgetId)
                                                    //console.log('dif: ' + Seconds_Between_Dates)
                                                } else {
                                                    getHist(JSON.parse(value));
                                                    lastTime = new Date()
                                                    lastWidget = JSON.parse(value).widgetId
                                                }
                                            });
                                            
                                            
                                            M 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            613
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            30
                                            858
                                            153893
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo