NEWS
jarvis v3.0.0 - just another remarkable vis
-
@oliwit82 Nocht mit > arbeiten sondern mit <. Jarvis nimmt immer den ersten korrekten.
-
@mcu Danke das war es
-
Hallo, vielen Dank für die super Entwicklungsarbeit.
Ich habe ein kleines "Problem" mit dem Display Image Widget.
Ich habe eine Video Türklingel von Netatmo, die ein Vorschaubild lokal ausgibt.
Das Format sieht so aus: hxxp://192.168.X.X/XXXX/live/snapshot_720.jpg
Die Aktualisierung über Leerzeichen funktioniert nicht und bei der Aktualisierung über zufällige Zeichen kommt gar kein Bild.
Ich habe versucht das Bild in eine html Seite einzubinden und diese Seite per iframe einzubinden. Dann funktioniert die Aktualisierung.
Leider klappt dann das resizing auf unterschiedlichen Endgeräten nicht mehr richtig. Ab und an blieb das Bild auch bestehen, selbst wenn ich den Tab innerhalb jarvis gewechselt habe. Hat jemand eine Idee, wie man das lösen könnte?
Wenn es geht würde ich nur ungern den Umweg über ein iframe gehen.Vielen Dank vorab und Gruß
-
Ich habe versucht das Bild in eine html Seite einzubinden und diese Seite per iframe einzubinden.
Zeig mal bitte das html.
-
Hallo,
ich habe mir die aktuelle alpha Version von Jarvis 3.2.0 - 49 heruntergeladen und stelle fest das mein Problem gelöst wurde mit den zu langen Objektnamen usw. Damit lässt es sich super arbeiten. Ich habe bei mir Styles eingetragen um z.B. die Switches in Jarvis rot und grün werden zu lassen wenn es aktiv oder nicht aktiv ist. Leider kann ich in der aktuellen Version keine Styles sehen (Feld in der Konfiguration von Jarvis ist leer) aber die Styles scheinen teilweise trotzdem noch zu funktionieren.
Hat vielleicht jemand einen Tipp dazu der auch die alpha Verison gerade einsetzt? Danke schon mal.
-
@hotspot_2 Upload?
iob upload jarvis
- web adapter neu starten
Forum Alpha v3.2.x -> https://forum.iobroker.net/topic/68566/jarvis-v3-2-x-just-another-remarkable-vis-alpha-testing
-
@mcu said in jarvis v3.0.0 - just another remarkable vis:
Ich habe versucht das Bild in eine html Seite einzubinden und diese Seite per iframe einzubinden.
Zeig mal bitte das html.
da ich kein Experte bin, habe ich mir das von chatgpt erstellen lassen.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Resized Image</title> </head> <body> <img src="http://192.168.x.x/xxxxx/live/snapshot_720.jpg" class="shrinkToFit" width="290" height="440"> </body> </html>
-
@lolmeister77 Was läuft daran jetzt nicht?
-
@mcu Je nach Device und Hoch- oder Querformat passt das iframe oder eben nicht.
Anbei Screenshot ipad Mini Hochformat. Hier wandert das Bild aus dem Rahmen raus:
Vermutlich weil man im inneren code des iframe sizing Informationen angeben muss (Sonst wäre das Bild zu groß).
Der Weg über das Display Image Widget wäre vielleicht besser, da klappt aber die Aktualisierung nicht. -
@lolmeister77 Wie oft soll es aktualisiert werden beziehungsweise wie oft wird ein Bild geliefert?
Probiere mal das als StateHTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Resized Image</title> </head> <body style="margin: 0; padding: 0; display: flex; justify-content: center;align-items: center; height: 100vh; "> <div style="max-height: 100%; overflow: hidden;"> <img id="jarvisImage" src="http://192.168.178.170/download/bilder/wegamstrand.jpg" style="width: 100%; height: 'auto';" > </div> <script> docReady(function() { if (isConfig()){ }else{ resizeImage() } }); window.addEventListener('resize', function(){ resizeImage() }); let imageClick = false; let imageUpdateInterval = null; document.getElementById('jarvisImage').addEventListener('click', function(){ console.log('Image geklickt'); imageClick = !imageClick; if(imageClick){ setBorder(true); imageUpdateInterval = setInterval(function(){ console.log('Interval ausgelöst!') actualizeImage() },2000) }else{ console.log('Interval abgebrochen'); setBorder(false) clearInterval(imageUpdateInterval); } }); function setBorder(active){ let image = document.getElementById('jarvisImage'); if(active){ image.style.border = '1px solid white'; }else{ image.style.border = ''; } } function resizeImage(){ let image = document.getElementById('jarvisImage'); let clientHeight = document.documentElement.clientHeight-3 let clientWidth = document.documentElement.clientWidth; let aspectRatio = image.naturalWidth / image.naturalHeight; let newWidth = clientHeight * aspectRatio; let newHeight = clientWidth / aspectRatio; if (newWidth > clientWidth) { clientHeight = clientWidth / aspectRatio-3; } else { clientWidth = newWidth; } let clientWidthTxt = clientWidth + 'px !important'; let clientHeightTxt = clientHeight +'px !important'; image.setAttribute("style","max-width:100%; height: "+clientHeightTxt +'; width: '+clientWidthTxt); } function actualizeImage() { let image = document.getElementById('jarvisImage'); let randomInt = Math.random(); image.src = 'http://192.168.178.170/download/bilder/wegamstrand.jpg?' + randomInt; image.alt = 'aktualisiertes Bild'; } function isConfig(){ if (document.baseURI.indexOf('configuration') >=0){ return true; }else{ return false; } } function docReady(fn) { if (document.readyState === "complete" || document.readyState === "interactive") { setTimeout(fn, 1000); } else { document.addEventListener("DOMContentLoaded", fn); } } </script> </body> </html>
2x die src ersetzen.
Also du klickst das Bild an, wenn es aktualisiert werden soll -> weißer Rahmen.
Wenn du keine Aktualisierung mehr brauchst, dann nochmal klicken. -
@mcu said in jarvis v3.0.0 - just another remarkable vis:
<!DOCTYPE html>
Erstmal vielen Dank für die Unterstützung!
Das "erste" Bild wird richtig angezeigt. Danach leider nicht mehr. Die Camera von Netatmo kommt mit angehängten Zufallszahlen nicht klar.
-
@lolmeister77 Dann versuch mal das?
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Resized Image</title> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Expires" content="0"> </head> <body style="margin: 0; padding: 0; display: flex; justify-content: center;align-items: center; height: 100vh; "> <div style="max-height: 100%; overflow: hidden;"> <img id="jarvisImage" src="http://192.168.178.170/download/bilder/wegamstrand.jpg" style="width: 100%; height: 'auto';" > </div> <script> docReady(function() { if (isConfig()){ }else{ resizeImage() } }); window.addEventListener('resize', function(){ resizeImage() }); let imageClick = false; let imageUpdateInterval = null; document.getElementById('jarvisImage').addEventListener('click', function(){ //console.log('Image geklickt'); imageClick = !imageClick; if(imageClick){ setBorder(true); imageUpdateInterval = setInterval(function(){ //console.log('Interval ausgelöst!') actualiszeImage() },2000) }else{ //console.log('Interval abgebrochen'); setBorder(false) clearInterval(imageUpdateInterval); } }); function setBorder(active){ let image = document.getElementById('jarvisImage'); if(active){ image.style.border = '1px solid white'; }else{ image.style.border = ''; } } function resizeImage(){ let image = document.getElementById('jarvisImage'); let clientHeight = document.documentElement.clientHeight-3 let clientWidth = document.documentElement.clientWidth; let aspectRatio = image.naturalWidth / image.naturalHeight; let newWidth = clientHeight * aspectRatio; let newHeight = clientWidth / aspectRatio; if (newWidth > clientWidth) { clientHeight = clientWidth / aspectRatio-3; } else { clientWidth = newWidth; } let clientWidthTxt = clientWidth + 'px !important'; let clientHeightTxt = clientHeight +'px !important'; image.setAttribute("style","max-width:100%; height: "+clientHeightTxt +'; width: '+clientWidthTxt); } function actualiszeImage() { let image = document.getElementById('jarvisImage'); //let randomInt = Math.random(); image.src = 'http://192.168.178.170/download/bilder/wegamstrand.jpg'; image.alt = 'aktualisiertes Bild'; } function isConfig(){ if (document.baseURI.indexOf('configuration') >=0){ return true; }else{ return false; } } function docReady(fn) { if (document.readyState === "complete" || document.readyState === "interactive") { setTimeout(fn, 1000); } else { document.addEventListener("DOMContentLoaded", fn); } } </script> </body> </html>
-
@lolmeister77 Dann versuch mal das?
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Resized Image</title> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Expires" content="0"> </head> <body style="margin: 0; padding: 0; display: flex; justify-content: center;align-items: center; height: 100vh; "> <div style="max-height: 100%; overflow: hidden;"> <img id="jarvisImage" src="http://192.168.178.170/download/bilder/wegamstrand.jpg" style="width: 100%; height: 'auto';" > </div> <script> docReady(function() { if (isConfig()){ }else{ resizeImage() } }); window.addEventListener('resize', function(){ resizeImage() }); let imageClick = false; let imageUpdateInterval = null; document.getElementById('jarvisImage').addEventListener('click', function(){ //console.log('Image geklickt'); imageClick = !imageClick; if(imageClick){ setBorder(true); imageUpdateInterval = setInterval(function(){ //console.log('Interval ausgelöst!') actualiszeImage() },2000) }else{ //console.log('Interval abgebrochen'); setBorder(false) clearInterval(imageUpdateInterval); } }); function setBorder(active){ let image = document.getElementById('jarvisImage'); if(active){ image.style.border = '1px solid white'; }else{ image.style.border = ''; } } function resizeImage(){ let image = document.getElementById('jarvisImage'); let clientHeight = document.documentElement.clientHeight-3 let clientWidth = document.documentElement.clientWidth; let aspectRatio = image.naturalWidth / image.naturalHeight; let newWidth = clientHeight * aspectRatio; let newHeight = clientWidth / aspectRatio; if (newWidth > clientWidth) { clientHeight = clientWidth / aspectRatio-3; } else { clientWidth = newWidth; } let clientWidthTxt = clientWidth + 'px !important'; let clientHeightTxt = clientHeight +'px !important'; image.setAttribute("style","max-width:100%; height: "+clientHeightTxt +'; width: '+clientWidthTxt); } function actualiszeImage() { let image = document.getElementById('jarvisImage'); //let randomInt = Math.random(); image.src = 'http://192.168.178.170/download/bilder/wegamstrand.jpg'; image.alt = 'aktualisiertes Bild'; } function isConfig(){ if (document.baseURI.indexOf('configuration') >=0){ return true; }else{ return false; } } function docReady(fn) { if (document.readyState === "complete" || document.readyState === "interactive") { setTimeout(fn, 1000); } else { document.addEventListener("DOMContentLoaded", fn); } } </script> </body> </html>
-
@mcu Das Bild bleibt gleich. Wenn ich das in der Konsole richtig sehe, wird das Bild nach dem ersten Klick (weißer Rahmen) noch einmal angefordert
-
@lolmeister77 Dann bestht die Chance das er auf verändertes alt reagiert.
Die eine Zeile bei acutalizeImage ändernfunction actualiszeImage() { let image = document.getElementById('jarvisImage'); let randomInt = Math.random(); image.src = 'http://192.168.178.170/download/bilder/wegamstrand.jpg'; image.alt = 'aktualisiertes Bild '+randomInt; }
Netatmo Diskussion
https://forum.iobroker.net/topic/9111/netatmo-adapter-und-presence-kamera-keine-erkennung-der-sub-event-type-s-human-vehicle-animal-unknown/55Hier ist ein script mit dem man das aktive Bild als einzelne Bilder setzt
-
@lolmeister77
Muss doch ein wenig anders gemacht werden.
Versuch mal.
https://mcuiobroker.gitbook.io/jarvis-infos/jarvis-v3/besonderheiten-v3/module/statehtml/http-image-im-html-mit-halbautomatischer-aktualisierung -
@mcu Wow. Vielen Dank. Das hat nun funktioniert.
Die lokale Adresse im Javascript habe ich noch auf meine iobroker url angepasst Zeile 88 -
@lolmeister77 Gib mal bitte den Type von der Türklingel von Netatmo an.
Wenn möglich bitte auch eine Beschreibung wie man bei der Klingel den http-Stream einstellt. Danke. -
@mcu Das ist die Netatmo Smart Doorbell (NDB). Ich habe diese in Apple Homekit eingebunden. Offenbar deaktiviert dies dann gewisse Funktionen. Der lokale Zugang ermöglicht den live snapshot als Bild abzurufen.
Zusätzlich kann man die lokalen "Events" (Person erkannt, Jemand hat geklingelt) im Nachhinein abrufen.
Leider unterscheidet sie sich dadurch zu den anderen Netatmo Kameras wo man einen lokalen Video-Livestream anzapfen kann:
https://dev.netatmo.com/apidocumentation/security -
Habe das Problem das öfters (1x pro Tag) Jarvis abstürzt:
Kann mir jemand weiterhelfen wie ich hier das Problem lösen kann?
Dies zeigt das Log für den betroffenen Zeitraum:
2024-01-28 10:17:25.369 - [33mwarn[39m: hm-rpc.1 (294) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:25.845 - [33mwarn[39m: jarvis.0 (157473) Install/InstallWizard.aspx: Not exists 2024-01-28 10:17:25.851 - [33mwarn[39m: jarvis.0 (157473) opennms/login.jsp: Not exists 2024-01-28 10:17:25.863 - [33mwarn[39m: jarvis.0 (157473) DesktopModules/AuthenticationServices/OpenID/license.txt: Not exists 2024-01-28 10:17:25.875 - [33mwarn[39m: jarvis.0 (157473) login.jsp: Not exists 2024-01-28 10:17:25.897 - [33mwarn[39m: jarvis.0 (157473) assets/login.jsp: Not exists 2024-01-28 10:17:25.904 - [33mwarn[39m: jarvis.0 (157473) dotnetduke/default.aspx: Not exists 2024-01-28 10:17:25.951 - [33mwarn[39m: jarvis.0 (157473) dotnetduke/Install/InstallWizard.aspx: Not exists 2024-01-28 10:17:25.972 - [33mwarn[39m: jarvis.0 (157473) dotnetduke/DesktopModules/AuthenticationServices/OpenID/license.txt: Not exists 2024-01-28 10:17:26.001 - [33mwarn[39m: jarvis.0 (157473) dotnetduke/: Not exists 2024-01-28 10:17:26.042 - [33mwarn[39m: jarvis.0 (157473) dnnarticle/default.aspx: Not exists 2024-01-28 10:17:26.076 - [33mwarn[39m: jarvis.0 (157473) dnnarticle/Install/InstallWizard.aspx: Not exists 2024-01-28 10:17:26.095 - [33mwarn[39m: jarvis.0 (157473) dnnarticle/DesktopModules/AuthenticationServices/OpenID/license.txt: Not exists 2024-01-28 10:17:26.139 - [33mwarn[39m: jarvis.0 (157473) dnnarticle/: Not exists 2024-01-28 10:17:26.159 - [33mwarn[39m: jarvis.0 (157473) cms/default.aspx: Not exists 2024-01-28 10:17:26.191 - [33mwarn[39m: jarvis.0 (157473) cms/Install/InstallWizard.aspx: Not exists 2024-01-28 10:17:26.217 - [33mwarn[39m: jarvis.0 (157473) cms/DesktopModules/AuthenticationServices/OpenID/license.txt: Not exists 2024-01-28 10:17:26.251 - [33mwarn[39m: jarvis.0 (157473) cms/: Not exists 2024-01-28 10:17:26.280 - [33mwarn[39m: jarvis.0 (157473) DotNetNuke/default.aspx: Not exists 2024-01-28 10:17:26.312 - [33mwarn[39m: jarvis.0 (157473) DotNetNuke/Install/InstallWizard.aspx: Not exists 2024-01-28 10:17:26.344 - [33mwarn[39m: jarvis.0 (157473) DotNetNuke/DesktopModules/AuthenticationServices/OpenID/license.txt: Not exists 2024-01-28 10:17:26.370 - [33mwarn[39m: hm-rpc.1 (294) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:26.378 - [33mwarn[39m: hm-rpc.0 (264) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:26.393 - [33mwarn[39m: jarvis.0 (157473) DotNetNuke/: Not exists 2024-01-28 10:17:26.425 - [33mwarn[39m: hm-rpc.1 (294) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:26.426 - [33mwarn[39m: hm-rpc.0 (264) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:26.459 - [33mwarn[39m: hm-rpc.0 (264) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:26.523 - [33mwarn[39m: jarvis.0 (157473) Install/InstallWizard.aspx: Not exists 2024-01-28 10:17:26.546 - [33mwarn[39m: jarvis.0 (157473) DesktopModules/AuthenticationServices/OpenID/license.txt: Not exists 2024-01-28 10:17:26.587 - [33mwarn[39m: jarvis.0 (157473) assets/Install/InstallWizard.aspx: Not exists 2024-01-28 10:17:26.619 - [33mwarn[39m: jarvis.0 (157473) assets/DesktopModules/AuthenticationServices/OpenID/license.txt: Not exists 2024-01-28 10:17:26.709 - [33mwarn[39m: jarvis.0 (157473) index.php: Not exists 2024-01-28 10:17:26.716 - [33mwarn[39m: host.iobroker-Server Cannot read file jarvis / assets/: EISDIR: illegal operation on a directory, read 2024-01-28 10:17:26.750 - [31merror[39m: jarvis.0 (157473) uncaught exception: Cannot read properties of null (reading 'message') 2024-01-28 10:17:26.751 - [31merror[39m: jarvis.0 (157473) TypeError: Cannot read properties of null (reading 'message') at Immediate.<anonymous> (/opt/iobroker/node_modules/iobroker.jarvis/lib/server.js:1:11860) at process.processImmediate (node:internal/timers:478:21) 2024-01-28 10:17:26.751 - [31merror[39m: jarvis.0 (157473) Cannot read properties of null (reading 'message') 2024-01-28 10:17:26.754 - [33mwarn[39m: jarvis.0 (157473) Terminated (UNCAUGHT_EXCEPTION): Without reason 2024-01-28 10:17:26.772 - [33mwarn[39m: jarvis.0 (157473) admin/index.php: Not exists 2024-01-28 10:17:26.834 - [33mwarn[39m: jarvis.0 (157473) : Not exists 2024-01-28 10:17:26.883 - [33mwarn[39m: jarvis.0 (157473) index.php: Not exists 2024-01-28 10:17:26.899 - [33mwarn[39m: jarvis.0 (157473) login.php: Not exists 2024-01-28 10:17:26.926 - [33mwarn[39m: host.iobroker-Server Cannot read file jarvis / assets/: EISDIR: illegal operation on a directory, read 2024-01-28 10:17:26.927 - [31merror[39m: jarvis.0 (157473) uncaught exception: Cannot read properties of null (reading 'message') 2024-01-28 10:17:26.928 - [31merror[39m: jarvis.0 (157473) TypeError: Cannot read properties of null (reading 'message') at Immediate.<anonymous> (/opt/iobroker/node_modules/iobroker.jarvis/lib/server.js:1:11860) at process.processImmediate (node:internal/timers:478:21) 2024-01-28 10:17:26.928 - [31merror[39m: jarvis.0 (157473) Cannot read properties of null (reading 'message') 2024-01-28 10:17:26.947 - [33mwarn[39m: hm-rpc.0 (264) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:26.966 - [33mwarn[39m: hm-rpc.1 (294) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:26.999 - [33mwarn[39m: hm-rpc.1 (294) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:27.023 - [33mwarn[39m: hm-rpc.1 (294) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:27.050 - [33mwarn[39m: hm-rpc.1 (294) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:27.066 - [33mwarn[39m: hm-rpc.1 (294) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:27.097 - [33mwarn[39m: hm-rpc.1 (294) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:27.217 - [33mwarn[39m: jarvis.0 (157473) trackit/Account/LogIn: Not exists 2024-01-28 10:17:27.226 - [33mwarn[39m: jarvis.0 (157473) TrackIt/Account/LogIn: Not exists 2024-01-28 10:17:27.233 - [33mwarn[39m: jarvis.0 (157473) TrackIT/Account/LogIn: Not exists 2024-01-28 10:17:27.243 - [33mwarn[39m: jarvis.0 (157473) TrackItWeb/Account/LogIn: Not exists 2024-01-28 10:17:27.248 - [33mwarn[39m: jarvis.0 (157473) tiweb/Account/LogIn: Not exists 2024-01-28 10:17:27.260 - [33mwarn[39m: jarvis.0 (157473) Account/LogIn: Not exists 2024-01-28 10:17:27.307 - [31merror[39m: host.iobroker instance system.adapter.jarvis.0 terminated with code 6 (UNCAUGHT_EXCEPTION) 2024-01-28 10:17:27.307 - [32minfo[39m: host.iobroker Restart adapter system.adapter.jarvis.0 because enabled 2024-01-28 10:17:27.307 - [33mwarn[39m: host.iobroker Do not restart adapter system.adapter.jarvis.0 because restart loop detected 2024-01-28 10:17:28.202 - [33mwarn[39m: hm-rpc.0 (264) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:28.229 - [33mwarn[39m: hm-rpc.0 (264) xmlrpc <- undefined method undefined with parameters undefined 2024-01-28 10:17:28.246 - [33mwarn[39m: hm-rpc.0 (264) xmlrpc <- undefined method undefined with parameters undefined