Smartvisu V3.2.2 -> V3.5 Update Fehler

Begonnen von Hackstall, 01 Dezember 2025, 00:15:13

Vorheriges Thema - Nächstes Thema

Hackstall

error: Unable to find template "lib.html" (looked into: /var/www/html/smartvisu/apps, /var/www/html/smartvisu/pages/Rosenstr.35, /var/www/html/smartvisu/dropins, /var/www/html/smartvisu/pages/base).
file: index.html
line: 15

Yes I have read the installation procedure but I still received the error as given above.

Can you please help out here.

Thanks Andreas

curiosus

here we go:

<svdir>/widgets/lib.html

/**
* -----------------------------------------------------------------------------
* @package     smartVISU
* @author      Martin Gleiß
* @copyright   2012 - 2024
* @license     GPL [http://www.gnu.de]
* -----------------------------------------------------------------------------
*/


/**
* the smartVISU-logo
*/
{% macro smartvisu(mode) %}

{% if mode == 'app' %}
<div class="app">
<div class="image">
<div class="smartvisu"><span class="smart"></span><br /><span class="visu">rHM</span></div>
</div>
</div>
{% else %}
<span class="smartvisu"><span class="smart"></span><span class="visu">rHM</span></span>
{% endif %}

{% endmacro %}


/**
* Check for new updates of smartVISU
*/
{% macro updatecheck( ) %}
{% if config_updatecheck %}
<script>
$('#index').on('pagecreate', function (event, ui) {
$.ajax({
dataType: 'json',
url: 'lib/base/check_update.php?local={{ config_version_full }}',
beforeSend: function(jqXHR, settings) { jqXHR.svProcess = 'Update Check'; },
success: function (data) {
if (data.update) {
notify.message('update', data.text, sv_lang['update']['local'] +': <b>' + data.local + '</b><br>' +
sv_lang['update']['remote'] +': <b>' + data.remote + '</b><br><br>' +
sv_lang['update']['visit'] + ' <a target="_blank" href="http://smartvisu.de">smartVISU.de</a> '+ sv_lang['templatechecker']['or'] +
' <a target="_blank" href="http://github.com/martin-gleiss/smartvisu">github</a> ' + sv_lang['update']['latest'] + '!<br><br>'+
'<a target="_blank" href="http://github.com/martin-gleiss/smartvisu/blob/master/changelog.md">' + sv_lang['update']['view'] + '</a><br><br>'+
sv_lang['update']['recheck'] + '. <br />');
}
}
})
.fail(notify.json);
});
</script>
{% else %}
<!-- Check for updates disabled in configuration -->
{% endif %}
{% endmacro %}


/**
* Widget to place an app-symbol
* If you write an app yourself, place a @title, @icon, @color tag in your
* header. These tags are used to display the symbol
*
* @param        the name of the app (located in pages/apps)
* @param        title of the app
*/
{% macro app(name, title) %}

{% set app = docu('apps/'~name~'.html') %}

<div class="app">
<a href="index.php?page={{ name }}">
<div class="image" style="background-color: #{{ app.color }};"><img src="{{ app.icon }}" alt="{{ app.name }}"></div>
<div>{{ title|default(app.title|e) }}</div>
</a>
</div>
{% endmacro %}

/**
* Widget to show websocket connection
*
*/
{% macro connection( ) %}
{% import "@widgets/basic.html" as basic %}
<span id="{{ page }}-connection"></span>
<script>
$('#{{ page }}-connection').html(io.socket.url);
if (io.server != undefined) {
if (io.server != '') { // if io.server already set write it directly
var connectString = 'smarthomeNG Websocket Server: '+ io.server + ', '+ sv_lang['system']['connected']+': '+ io.opentime.transUnit('short') +
'<br>Websocket URL:&nbsp;&nbsp;' + io.socket.url;
$('#{{ page }}-connection').html(connectString);
} else {
$(document).on('ioAlive', function(){   //else wait for ioAlive event and write then
if (io.server != '' ) {
var connectString = 'smarthomeNG Websocket Server: '+ io.server + ', '+ sv_lang['system']['connected'] + ': '+ io.opentime.transUnit('short') +
'<br>Websocket URL:&nbsp;&nbsp;' + io.socket.url;
$('#{{ page }}-connection').html(connectString);
}
})
}
}
</script>
{% endmacro %}

/**
* Button to send a timestamp to an item (for countdown docu page)
*
* @param {id} unique id for the widget. Mandatory in order to identify the button in a page with more than one button
* @param {item(num)} the item
*
* @Author: Wolfram v. Hülsen
*/
{% macro timestamp (id, item) %}
<button type="button" data-theme="a" data-inline="true" id="send_timestamp_{{ uid(page, id) }}" class="ui-midi">Trigger</button> Click to start
<script>
$('#send_timestamp_{{ uid(page, id) }} ').click(function() {
var now = +new Date();
io.write('{{ item }}', now );
});
</script>
{% endmacro %}

/**
* Extend a single block to full screen width
*
* @param {id=} unique id for the widget.
*
* @Author: bonze  (plot resize and icon management by Wolfram v. Hülsen)
*/
{% macro supersize ( id ) %}
{% set uid = uid(page, id) %}
{% import _self as lib %}
<span{% if not id is empty %} id="{{ uid(page, id) }}"{% endif %} >
<a>{{ lib.svgimg ('', 'control_centr_arrow_up_right.svg', 'supersize icon0 sizesmall') }}</a>
<a>{{ lib.svgimg ('', 'jquery_minus.svg', 'supersize icon0 sizebig', 'display:none;') }}</a>
</span>
<script>
$(".supersize").closest("div").on("collapsiblecreate", function (event, ui){
var element = $(this);
if (element.parent().attr("data-iconpos") == "right")
element.collapsible({iconpos: "none"});
});

$(".supersize").click(function (e) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
var element = $(this).closest("div");
var previousWidth = parseFloat(element.css('width').replace('px',''));
var previousHeight = parseFloat(element.find('.ui-collapsible-content').css('height').replace('px',''));

if (!element.hasClass('overlay')){
$(".mask").css('display','block');
element.addClass("overlay").show();
element.collapsible('expand');
element.find("h3").addClass("ui-corner-all");
element.find(".supersize.sizesmall").hide();
element.find(".supersize.sizebig").show();
element.find(".supersize").attr("data-ypos", Math.round(window.scrollY));
element.find('.highcharts-root').addClass('supersized');
$.mobile.silentScroll(0);
}else{
$(".mask").css('display','none');
element.removeClass("overlay");
element.find("h3").removeClass("ui-corner-all");
element.find(".supersize.sizebig").hide();
element.find(".supersize.sizesmall").show();
element.find('.highcharts-root').removeClass('supersized');
var previousPosition = element.find(".supersize").attr("data-ypos")*1;
$.mobile.silentScroll(previousPosition);
}
var actualWidth = parseInt(element.css('width').replace('px',''));
var sizeFactor = actualWidth / previousWidth;
element.find('.ui-collapsible-content').css('height', previousHeight * sizeFactor)
.find('.plot').each(function() {
var actualPlotHeight = parseFloat($(this).css('height').replace('px',''));
$(this).css('height', actualPlotHeight * sizeFactor);
$(this).highcharts().setSize(null, null);
}).end()
.find('[data-widget="device.uzsutable"] .highcharts-root').css('max-height', sizeFactor < 1 ? '' : 400*sizeFactor+"px");
});
</script>
{% endmacro %}

/**
* Embed an svg icon into html DOM in order to make it styleable.   
  icon must be available in ./icons/ws or ./dropins/icons/ws. Otherwise use &lt;img src=... with icon path and name
*
* @param {text=} optional id for the icon
* @param {text} icon name e.g. 'myicon' or 'myicon.svg'
* @param {text=} CSS classes for the icon (optional, default='')
* @param {text=} styling options in CSS notation (optional, default='')
*
* @Author: Wolfram v. Hülsen
*/
{% macro svgimg ( id, pic, iconclass, styleoptions ) %}
{% set pic = localize_svg(pic) %}
<svg class="icon {{ iconclass }}" {% if not id is empty %} id="{{ uid(page, id) }}"{% endif %} {{ (styleoptions is not empty ? 'style ="' ~ styleoptions ~'"' : '')|raw }} role="img" aria-label="{{ pic|split('/')|last|split('.')[0:-1]|join('.') }}"
{{ source( pic )|split('<svg')[1]|replace( {'stroke="#fff"':'', 'fill="#fff"':'', 'stroke="#FFF"':'', 'fill="#FFF"':''} )|raw }}
{% endmacro %}

good luck
Klaus
NUC | Fronthem/Smartvisu | Nextcloud | DBLog | Grafana | div. HM Akt-/Sensoren | ESP8266/32 | 1-Wire | Shelly | WH1000 | PWM-PWMR | Xiaomi | MQTT | CarConnectivity-MQTT | Luftsensor.info | Alexa | iRobots | Zigbee | HUE | SENEC Bat+Wallbox | Zoneminder | Fritz!/Box/Fon/Repeater

wvhn

Moin Andreas,

das Problem ist in den Release Notes für v3.5 unter "Wichtig !!! für den Umstieg" beschrieben und hier genau erklärt.

Der Import von Widgets wird schon seit v2.9 automatisch gemacht, so dass man in den eigenen Seiten keine Import-Anweisungen mehr braucht. Lediglich in eigenen Widgets muss man die verwendeten Widgets noch explizit importieren. Zusätzlich wurde für die Widgets in v3.3 ein Namespace "@widgets" eingeführt. Der Namespace legt die Ordner fest, in denen nach einem zu importierenden Widget gesucht wird. Dieser Suchpfad ist jetzt unabhängig von dem Pfad, in dem Visu-Seiten gesucht werden. Grund für dies Maßnahme war, dass Anwender bei der Vergabe der Seitennamen immer mal wieder Namen verwendet haben, die für die Widgets reserviert waren, z.B. "multimedia.html". Die alte Methode war 2 Jahre deprecated und wurde in v3.5 abgeschaltet.

Die von Dir gepostete Fehlermeldung besagt, dass das Widget "lib.html" im falschen Pfad gesucht wurde. Du mussst also in Deiner ./pages/Rosenstr.35/index.html nach der Import-Anweisung für lib.html suchen und diese löschen:
{% import "lib.html" as lib %}Ebenso alle anderen Widget-Importe, die noch in Deinen Visu-Seiten vorhanden sind.

Gruß
Wolfram

Hackstall

Ok danke
Habe ich nun gemacht und prinzipiell funktioniert es nun auch aber ein paar Effekte sehe ich dennoch die ich mit 3.2.2 nicht hatte.

1) Der Template chaecker ist nicht mehr anwählbar.
2) Auf dem Handy muss ich nun manchmal die Menüs auswählen und 2 mal den Menü-Button drücken  (auf drm pc funktioniert es)
3) auf dem PC erscheinen manche Icons der Menü Steuerung riesig (nicht bei allen Menüs und nur auf dem PC und nicht auf dem Handy)

Was kann ich tun.

Danke

wvhn

#4
zu den einzelnen Punkten:
  • gibt es Fehlermeldungen? Was passiert, wenn Du den TC anwählst und dann nochmal F5 drückst? Evtl. kommen mehr Meldungen, wenn Du in der config.ini manuell folgende Zeile ergänzt:
    debug = "1"
  • Bei den Menüschaltflächen des Raum-Menüs kommt es manchmal vor, dass die Fläche bei Antippen aktiviert wird, aber den Link nicht ausführt. Das scheint damit zusammenzuhängen, wo genau die Schaltfläche beim Antippen "getroffen" wird. Ich schau mir das nochmal an.
  • Oft ist ein Schreibfehler bei den Klassen die Ursache. Poste mal ein Beispiel von einem Menüeintrag, bei dem der Effekt auftritt
Du kannst mir auch per PN einen Link auf eine Dropbox o.ä. mit Deiner gesamten smartVISU-Installation schicken. Dann lasse ich die bei mir mal laufen.

Gruß
Wolfram 

wvhn

Moin Andreas,

zu Punkt 2 habe ich noch einige Tests durchgeführt. Bei meinem iPad tritt dieser Effekt in allen Versionen seit v2.9 auf. Wenn man einen Menüpunkt anklickt, während die Widgets für Wetter, Uhr, Kalender und Telefonliste noch aufgebaut werden, dann wird der Click-Event unterdrückt, der den Link zu der angewählten Raumseite auslösen soll. Das passiert tief im System und ich habe noch keine Idee, wie man das verhindern kann.

Dass dies in höheren SV-Versionen häufiger aufzutreten scheint, liegt vlt. daran, dass die Widgets mehr Funktionen haben und dadurch etwas länger brauchen. Wenn ich warte, bis die Widgets fertig aufgebaut sind, tritt das Problem nicht auf.

Ist das bei Dir auch so?

Hackstall

Problem 1 + 3 scheinen sich in Luft aufgelöst zu haben.
Keine Ahnung aber jetzt kann ich Template checker aufrufen und die Icons sind auch ok.

Nur dieser Doppelklick nervt wirklich.

Der notwendige Dopoelklick ist nur auf dem Handy notwendig und nicht auf dem PC.

Gruß Andreas

wvhn

Moin Andreas,

1 und 3 waren dann wahrscheinlich vom Browser-Cache verursacht. Lösche mal auf dem Handy die Website-Daten. Vielleicht verschwindet 2 dann auch noch.

Wenn Du schreibst, dass das Problem nervt, ist es ja nicht das sporadische Auftreten, wie ich es beschrieben habe, oder?

Gruß
Wolfram

Hackstall

Danke für Deine Antwort:

Habe auf dem Handy gesamten Verlauf gelöscht.
Webseitendaten löschen =?

Ja das Problem ist immer da und nicht nur sporadisch.

Will nicht unfreundlich sein aber es nervt schon ein wenig, zumal es auf dem PC nicht auftritt.
Vielleicht findest Du ja einen Workaround. Danke schon mal im Voraus

Gruss Andreas

wvhn

#9
Moin Andreas,

Das Release ist über ein Jahr alt und bisher hat niemand ein solches Verhalten berichtet. Bei dem Problem muss es sich also um einen speziellen Effekt Deiner persönlichen Installation handeln. Deshalb die Bitte / das Angebot, die kompletten Dateien inkl. der eigenen Seiten als Dropbox-Link per PN zu schicken. Dann kann ich Deine Visu komplett bei mir laufen lassen und das Problem lokalisieren.


Gruß
Wolfram

Hackstall

Oh das verstehe ich aber nicht.
Du hast doch selber gesagt, dass du das Problem auf dem IPad hast (siehe 3 Posts zuvor)

Ich habe nun auch noch ein bisschen herumprobiert.

1) Auf dem PC gibt es das Problem nicht.
2) Auf meinem IPhone 16 Pro Max unter Safari tritt es immer auf.
3) Auf meinem IPhone tritt es anscheinend nicht unter Firefox auf.
4) Ich habe den Eindruck dass es nach dem letzten Update von iOS gekommen ist.

Somit Safari Problem?
Haben andere auch das Problem?



Hackstall

Oh das verstehe ich aber nicht.
Du hast doch selber gesagt, dass du das Problem auf dem IPad hast (siehe 3 Posts zuvor)

Ich habe nun auch noch ein bisschen herumprobiert.

1) Auf dem PC gibt es das Problem nicht.
2) Auf meinem IPhone 16 Pro Max unter Safari tritt es immer auf.
3) Auf meinem IPhone tritt es anscheinend nicht unter Firefox auf.
4) Ich habe den Eindruck dass es nach dem letzten Update von iOS gekommen ist.

Somit Safari Problem?
Haben andere auch das Problem?



wvhn

Ich denke, jetzt müssen wir die Dinge ein bisschen sortieren.

  • In diesem Thread hier geht es um das Update auf smartVISU v3.5. Nach Lösen des ursprünglichen Problems beklagst Du, dass es ein Problem mit den Menüpunkten gibt. Man müsse diese teils doppelt anklicken. Die Angaben zur Häufigkeit variieren zwischen "manchmal", "nervend" und "immer da, nicht nur sporadisch". Eine genauere Beschreibung des Verhaltens fehlt. Ich habe in diesem Zusammenhang ein sporadisch auftretendes Problem mit iOS-Geräten beschrieben. Auf iPads kann man das relativ leicht provozieren, auf iPhones nur durch sehr schnelles Umschalten von Seiten noch während des Seitenaufbaus. Meine Frage, ob das Problem sich bei Dir ähnlich zeigt, hast Du nicht beantwortet.

    Ob dieses Problem von v3.5 verursacht wird, kannst Du relativ leicht feststellen, indem Du v3.2.2 wieder aktivierst. Es wird ja eh empfohlen, bei einem Update eine Zeit lang die alte und neue Version parallel zu betreiben.

  • Du bringst jetzt das Update von iOS ins Spiel. Tatsächlich gibt es ein Problem mit Safari unter iOS/iPadOS v26.1, das die Funktion des Websockets beeinträchtigt. Davon sind derzeit alle smart home Systeme betroffen, die mit Websockets arbeiten. Die Visu bekommt Daten vom Backend dadurch entweder stark (bis zu mehrere Minuten) verzögert, oder gar nicht. Ich verwende deshalb jetzt Firefox auf dem iPad. Die Menüsteuerung sollte allerdings von dem Fehler nicht betroffen sein. Das Problem sind eher fehlende Daten. so dass die Widgets keine aktuellen Werte anzeigen.

    Möglicher Effekt durch die Menüsteuerung: mit `data-ajax = "false" ` in den anchor tags zwingt man die Visu jedes Mal zum Neuladen der aufgerufenen Seite. Damit wird auch die bestehende Websocketverbindung unterbrochen und muss neu aufgebaut werden - unter Safari v26.1 wird das dann wirlich nervend. Falls das bei Dir so ist, solltest Du diese Einträge beseitigen. Die Seiten bleiben dann im Speicher, so dass der Seitenaufbau schneller geht.

Hackstall

Hallo nochmals danke für Deine Antwort.
wie gesagt ich möchte nicht unhöflich erscheinen. Keine Kritik an SMARTVISU.

Ich denke der 2te Punkt klingt interessant und ja (hier war ich wohl etwas lückenhaft in meiner Fehlerbeschreibung) ich muss immer 2 mal auf meinen MenueButton drücken damit Daten erscheinen. Das Menue wird immer aufgebaut jedoch ohne Daten und Kurven.

Du sagtest : Falls das bei Dir so ist, solltest Du diese Einträge beseitigen.
Sorry was meinst Du hier genau welche Einträge?

Danke Gruss Andreas

wvhn

Gemeint sind die Menüeinträge im Raummenü (rooms_menu.html oder navigaton.html - je nachdem, wie Du die Datei genannt hast). Wenn hier in den <a>-tags der Zusatz `data-ajax="false"` steht, dann zwingst Du die Visu dazu, jede Seite komplett neu zu laden, einschließlich Neustart des Websocket. Wenn der Websocket eh schon Probleme macht, verschlimmert das das Verhalten.
Also die Einträge `data-ajax="false"`einfach löschen.

Gruß
Wolfram