Hallo,
super das Du Dein Plugin inkl. Widget ins Github (https://github.com/Tom-Bom-badil/helios/wiki) hochgeladen hast. Super Anleitung, hab es getestet.
Läuft bis auf einige Icons werden nicht angezeigt. Im Code verweisen Icons in Dein speziellen Grafik Ordner.
Da ist aber nur die SVG enthalten die das Haus abbildet.
Ich denke da fehlen noch Icons oder?
Gruß
Sebastian
Ankündigung
Einklappen
Keine Ankündigung bisher.
Erweiterung Helios / Vallox Plugin
Einklappen
X
-
Das 'Grundgerüst' des Plugins kannst Du vermutlich übernehmen. Wenn Du die Variablennamen beibehältst, kannst Du die Items, Berechnungen und Visu von mir komplett weiterverwenden.
Hauptunterschied ist das Protokoll - in den alten Anlagen war es immer 6 Bytes lang (siehe hier, Beispiel auf Seite 1).
In den neuen Modellen wird wohl Modbus-TCP verwendet, siehe hier. Ausprobieren konnte ich das nicht, hab halt noch das alte Modell.
Viel Erfolg!
/tom
Einen Kommentar schreiben:
-
Hi, ich möchte das Plugin für die neuen W Modelle umschreiben.
Vielleicht kann mir ja jemand helfen oder genaue Anleitungen geben wie ich am besten starte.
Danke
Einen Kommentar schreiben:
-
Achso, falls noch jemand gerade am Herumexperimentieren ist - anbei mal mein aktuelles Items-File mit Berechnung des Wirkungsgrades, Luftaustauschrate, DIN-Luftberechnung nach Wohnfläche, usw. Der nächste Schritt wird sein, den elektrischen Verbrauch der Anlage aufzuzeichnen. Die conf-Datei ist dadurch 'ein wenig' gewachsen - am Plugin selbst mache ich kaum noch was, die Items werden aber ständig erweitert.
Hier mal eine Visu-Aufnahme im Helios-Debug-Mode (Anzeige aller möglichen Infos auf der eigentlichen Grafik):
kwl.png
/tomAngehängte Dateien
Einen Kommentar schreiben:
-
Uff, hab hier keine Quellcodeverwaltung am Laufen, ich kann nachher mal von Hand ein diff machen. Grundsätzlich habe ich keine wesentlichen Routinen angefasst, nur:- + from lib.model.smartplugin import SmartPlugin (Zeile 30)
- + self.logger = logging.getLogger(__name__) (Zeile 101)
- logger.info in logger.debug geändert, um Logfile-Spamming durch weisses Rauschen am Bus zu unterbinden (Zeile 411)
- alle alten logger.irgendwas in self.logger.irgendwas getauscht
- altes Log-Format auskommentiert (Zeile 483-491)
- auf smartPlugin angepasst (Zeile 95-98)
/Tom
Edit: Bitte dran denken, auch den Inhalt von __pycache__ zu löschen (wobei es daran eigentlich nicht liegen dürfte).Zuletzt geändert von Tom Bombadil; 14.12.2016, 20:17.
Einen Kommentar schreiben:
-
Hallo Tom, danke dass du das Projekt weitermachst. Gibts irgendwo eine Beschreibung was geändert wurde ?
Bei mir funktioniert das einfach tauschen das __init__.py nicht, nach dem Tausch bekomme ich keine Daten mehr von der Anlage.
Wechsel ich wieder zur alten zurück, funktioniert wieder alles...
Einen Kommentar schreiben:
-
Das Ok von Marcel als Autor und mir als "Modifikator" steht weiter oben - es ist mir aber im Moment zu kompliziert, mich in den ganzen Git-Kram einzuarbeiten.
Irgendwo hab ich neulich gelesen, dass jemand an einem "How-to-Git" für Dummies wie mich feilt - wenn das vorliegt, integrier ich's gern rein und halte es dann auch up-to-date ...
/tom
Einen Kommentar schreiben:
-
Ich würde mir ja nach wie vor eine Integration ins SmarthomeNG Release wünschen. Kann es nicht jemand ins Dev einchecken?
Einen Kommentar schreiben:
-
Hallo,
anbei die letzten Plugin-Änderungen (u.a. angepasst an smartPlugin und Logging, wie damals von Sprocky und Msinn angeregt).
Wie üblich nach plugins/helios/__init__.py kopieren.
Sobald ich mit dem smartVisu Widget signifikant weiter bin, gibt's auch mal wieder das 'volle Paket', bis dahin ist der letzte veröffentlichte/getestete Stand gültig (siehe oben).
/tomAngehängte Dateien
Einen Kommentar schreiben:
-
Hallo Tom,
kannst du dein Plugin bzw. die VISU auf einem Smartphone aufrufen ? Bei mir wird auf dem Smartphone zwar das Hintergrund angezeigt aber weder die Uhr noch Datum noch dein Widget.
Auf dem Tablet funktioniert es wiederum Problemslos. Beim Rechner kann man das ganz gut darstellen, solange das Browserfenster eine gewisse Größe hat wird es dargestellt, verkleinert man es daraufhin in der Breite so ist es weg.
Gruss Reinhold
Einen Kommentar schreiben:
-
Die gibt es bei Helios, z.B. hier (je nach Gerätemodell). Allerdings ist schon die Länge der Datensätze bei beiden Protokollen unterschiedlich, von den Inhalten/Registern ganz zu schweigen. Im Grunde braucht es ein komplett neues Plugin. Werden die Bezeichner konsequent beibehalten, kann zumindest der Visu-Teil bleiben (welcher der deutlich aufwendigere Teil ist).Zitat von jes Beitrag anzeigengibt es es evtl. eine Beschreibung zu den Änderungen oder zum neuen Protokoll?
/tom
Einen Kommentar schreiben:
-
gibt es es evtl. eine Beschreibung zu den Änderungen oder zum neuen Protokoll?Zitat von Tom Bombadil Beitrag anzeigenHallo Jes,
wenn ich mich richtig erinnere, wurde bei den neuen W-Modellen das Protokoll geändert (längere Protokollzeilen). Das Plugin wird somit ohne Umprogrammierung nicht funktionieren.
/tom
Oder muss man sich die "sniffen"?
Ggf. könnte ich es bei mir lokal versuchen im Plugin zu ändern.
Danke & Grüße,
Jes
Einen Kommentar schreiben:
-
Ignorieren, die kommen erst noch.
Du kannst die beiden folgenden Abschnitte entfernen:
/** Use this one for logic-triggered booster mode - "easy mode" **/
[...]
und gleich darunter:
/** Use this one for logic-triggered booster mode - "interactive mode" with popup **/
[...]
Dann ist es 'hausfrauenfreundlich' und bietet Dir nur die originale Vallox-Stosslüftung an. Die anderen beiden sind wie gesagt in Deiner Version noch nicht fertig (und hier bei mir erst zu 90%).
/tom
Einen Kommentar schreiben:
-
Hm ok, aber meine Helios.html sieht einwenig anders aus:
Code:/** * ------------------------------------------------------------------------------------------------- * * Functions: Visualization of a Helios controlled air system (Helios ECxxxPro) * Also works for various Vallox devices * * Requires: Ready-to-use smarthome.py with up-and-running Helios plugin (see there) * - Updated helios.conf in smarthome/items (items config) * - Updated logic.conf in smarthome/etc (logics config) * - Updated helios_logics.py in smarthome/logics (contains related logics) * Ready-to-use smartVISU with UZSU widget * * Install: Copy this file to helios_base_dir (default: smartVISU/widgets/) * Copy images to helios_pic_dir (default: smartVISU/pics/helios/) * * Usage: Add the following lines your smartVISU's html: * * {% import "helios.html" as helios %} * {{ helios.show_widget(id, use_uzsu, title) }} * * Parameters: * id - Unique device id (device name recommended - no spaces!) * use_uzsu - true / false (installing UZSU first is highly recommended) * title - Optional title above the image * * Example: * {% import "helios.html" as helios %} * {{ helios.show_widget('EC300Pro', true, 'Kontrollierte Wohnraumlüftung') }} * * ------------------------------------------------------------------------------------------------- **/ {% macro show_widget(id, use_uzsu, title) %} /** ---------- The main widget -------------------- **/ /** Preparations **/ {% import "basic.html" as basic %} /** don't touch these 3 **/ {% import "widget_uzsu.html" as uzsu %} {% set uid = uid(page, id) %} {% set debug_mode = false %} /** additional output (debugging) **/ {% set helios_base_dir = 'widgets' %} /** directory of this and css file **/ {% set helios_pic_dir = 'pics/helios' %} /** directory of own pics **/ /** Your own strings, translations and outputs, as you deem necessary: **/ {% set level_popup_title = 'Lüftungsstufe einstellen - aktuell: ' %} {% set uzsu_popup_title = 'KWL Schaltuhr' %} {% set uzsu_tester_title = '[Vent][[Fan]][[[FanUZSU]]]-->' %} {% set booster_popup_title = 'KWL Stoßlüftung' %} {% set info_popup_title = 'Info / Status' %} {% set error_popup_title = 'Anlagenfehler ' %} /** Items for the Info Popup **/ {% set info_popup_items = { 'Lüfterstufe<sub>min</sub>': 'min_fanspeed', 'Lüfterstufe<sub>max</sub>': 'max_fanspeed', 'WRGΔ': 'bypass_temp', 'Filterreinigung in': 'clean_filter', 'Letzter Fehler': 'device_error', 'Zuluftventilator (?)': 'fan_in_on_off', 'Zuluftmotor %': 'fan_in_percent', 'Abluftventilator (?)': 'fan_out_on_off', 'Abluftmotor %': 'fan_out_percent', 'Stoß-/Kaminlüftung': 'booster.built_in.mode', 'Luftdurchsatz': 'airflow', 'Luftaustauschrate': 'air_exchange_rate', 'Wärmeverlust (W)': 'energy_loss', 'Wärmegewinn (W)': 'energy_saving', 'Wirkungsgrad Æž<sub>therm</sub>': 'efficiency', 'Stromverbrauch Ventilatoren': 'consumption_ventilators', } %} /** Error codes ---> muss in einem item stehen **/ {% set error_popup_codes = { 0: '0x00 Kein Fehler', 1: '0x01 reserviert', 2: '0x02 reserviert', 3: '0x03 reserviert', 4: '0x04 reserviert', 5: '0x05 Zuluftsensor', 6: '0x06 CO2-Alarm', 7: '0x07 Frischluftsensor', 8: '0x08 Abluftsensor', 9: '0x09 Frostwarnung Wärmetauscher', 10: '0x0A Fortluftsensor' } %} /** Error descriptions ---> muss in einem item stehen **/ {% set error_popup_descriptions = { 0: '0x00 Keine Fehlerbeschreibung', 1: '0x01 reserviert', 2: '0x02 reserviert', 3: '0x03 reserviert', 4: '0x04 reserviert', 5: 'Fühler lose, Kurzschluss oder Temperatur >90°C gemessen.', 6: 'CO2 > 5000 ppm seit 3 Minuten - Brandwarnung!', 7: 'Fühler lose, Kurzschluss oder Temperatur >90°C gemessen.', 8: 'Fühler lose, Kurzschluss oder Temperatur >90°C gemessen.', 9: 'Außenluft <0°C / Zuluft <8°C - Frostgefahr Wasserheizregister!', 10: 'Fühler lose, Kurzschluss oder Temperatur >90°C gemessen.' } %} /** Error codes ---> muss in einem item stehen **/ {% set error_popup_solutions = { 0: '0x00 Kein Fehler', 1: '0x01 reserviert', 2: '0x02 reserviert', 3: '0x03 reserviert', 4: '0x04 reserviert', 5: 'Gerät ausschalten (Stecker ziehen), kurz warten und wieder einstecken.', 6: 'Bitte Ursache für CO2-Alarm ermitteln oder ggf. Sensor überprüfen.', 7: 'Gerät ausschalten (Stecker ziehen), kurz warten und wieder einstecken.', 8: 'Gerät ausschalten (Stecker ziehen), kurz warten und wieder einstecken.', 9: 'Der Alarm verschwindet automatisch bei normalisierten Temperaturen.', 10: 'Gerät ausschalten (Stecker ziehen), kurz warten und wieder einstecken.' } %} /** Bleibt der Fehler bestehen, verständigen Sie die Wartungsfirma für Überprüfung/Austausch des Fühlers. **/ /** The style sheet **/ <link type="text/css" rel="stylesheet" href="{{helios_base_dir}}/helios.css"/> /** Let's go **/ <div id='{{uid}}-main' class='block' style='text-align:left;'> /** Title (if not left empty) **/ {% if title %} <h2>{{ title }}</h2> {% endif %} /** Display picture - not the smart way, but works **/ <img id='{{uid}}-main-image' src="{{helios_pic_dir}}/controlled_air.png" alt="Ventilation System"> /** Place temperatures on top the picture **/ <div class="helios_outside_temp"> {{ basic.float(id~'_outside_temp', 'ventilation.outside_temp', '°C') }}</div> <div class="helios_inside_temp"> {{ basic.float(id~'_inside_temp', 'ventilation.inside_temp', '°C') }}</div> <div class="helios_exhaust_temp"> {{ basic.float(id~'_exhaust_temp', 'ventilation.exhaust_temp', '°C') }}</div> <div class="helios_incoming_temp">{{ basic.float(id~'_incoming_temp','ventilation.incoming_temp','°C') }}</div> /** Place the level icon that triggers popup for level change (simulate a switch by using <a href>) **/ /** basic.symbol will only place the 'active' icon from the loop - let's find out which is the right one: **/ <div class="helios_level_icon"> <a href="#popup_helios_level" data-rel="popup"> {% for level in 1..8 %} {% set itemid = id~'_display_level_'~level %} {% set symbol = icon0~'edit_numeric_'~level~'.svg' %} {{ basic.symbol(itemid, 'ventilation.fanspeed', '', symbol, level) }} {% endfor %} </a> /** Here's the corresponding popup for switching the level **/ <div id="popup_helios_level" class="helios_popup_levelswitch" data-role="popup" data-overlay-theme="c"> <a href="#" data-rel="back" data-role="button" data-icon="delete" data-iconpos="notext" class="ui-btn-right";>Close</a> <span class="ui-btn-up-c helios_popup_header"> {{ level_popup_title }} {{ basic.value(id~'_display_current_level', 'ventilation.fanspeed') }} </span> <br/> /** -----------> Todo: Aktuelle Stufe farbig einfärben ------------------------- **/ {% for level in 1..8 %} {% set itemid = id~'_set_level_'~level %} {{ basic.button(itemid, 'ventilation.fanspeed', level, '', level, 'mini') }} {% if level == 4 %} <br/><br/> {% endif %} {% endfor %} </div> </div> /** Icon for error message (placed left of level switch whenever an error is up) --> noch auf 'ventilation.device_error' setzen**/ <div class="helios_error_icon"> {{ _self.symbol_notzero(id~'_error', 'ventilation.booster.logics.boost_duration', helios_pic_dir~'/message_attention.png', 'ERROR!', '#popup_helios_error') }} /** Here's the corresponding popup with the detailed error description **/ <div id="popup_helios_error" class="helios_popup_error" data-role="popup" data-overlay-theme="c"> <a href="#" data-rel="back" data-role="button" data-icon="delete" data-iconpos="notext" class="ui-btn-right";>Close</a> <span class="ui-btn-up-c helios_popup_header"> {{ error_popup_title }} {{ basic.value(id~'_error_level', 'ventilation.boost_remaining_a') }} </span> <br/> /** -----------> Todo: Fehlermeldung ------------------------- **/ <red>Die KWL hat einen Fehler gemeldet:</red> {{ basic.value('abcdefa', 'ventilation.error_handler.error_string.code') }}<br/> Beschreibung:<br/> {{ basic.value('abcdefg', 'ventilation.error_handler.error_string.description') }} <br/><br/> Mögliche Ursachen:<br/> {{ basic.value('abcdefh', 'ventilation.error_handler.error_string.cause') }} <br/><br/> Fehlerbehebung:<br/> {{ basic.value('abcdefi', 'ventilation.error_handler.error_string.solution') }} </div> </div> /** Icon for filter cleaning (placed right of level switch whenever cleaning is due) **/ <div class="helios_filterchange_icon"> {{ basic.symbol(id~'_clean_filter', 'ventilation.clean_filter', '', helios_pic_dir~'/message_service.png', 0) }} /** -----------> Todo: Rücksetzen des Wertex auf xx Monate ------------------------- **/ </div> /** Icons in the lower level next **/ /** Power on/off **/ <div class="helios_power_switch"> {{ basic.switch(id~'_power_state', 'ventilation.power_state', icon1~'control_on_off.png', icon0~'control_on_off.png') }} </div> /** Bypass on/off **/ <div class="helios_bypass_switch"> {{ basic.switch(id~'_bypass_state', 'ventilation.bypass_disabled', icon1~'sani_floor_heating.png', icon0~'sani_floor_heating.png') }} </div> /** Timer popup (UZSU) **/ {% if use_uzsu %} <div class="helios_uzsu_switch"> {{ uzsu.uzsu_icon(id~'_fanspeed_timer', 'ventilation.fanspeed.uzsu_timer', ' ','0','','','num','An','Aus') }} </div> {% endif %} /** Original Helios booster switch - use with care, cannot be deactivated once started - "helios mode" **/ <div class="helios_booster_switch_helios"> {{ basic.switch(id~'helios_boost_builtin', 'ventilation.booster.built_in.on_switch','', icon0~'vent_ventilation_level_3.png') }} </br><small> Helios</small> /** -----------> Todo: Bei Restzeit > 0 hier statt des Icons die verbleibende Zeit mittels basic.value einblenden ------------------- **/ </div> /** Use this one for logic-triggered booster mode - "easy mode" **/ <div class="helios_booster_switch_easy"> {{ basic.switch(id~'helios_boost_logic1', 'ventilation.booster.logics.switch', icon1~'control_x.png', icon0~'vent_ventilation_level_3.png') }} </br><small> Easy</small> /** -----------> Todo: Restzeit einblenden ------------------- **/ </div> /** Use this one for logic-triggered booster mode - "interactive mode" with popup **/ <div class="helios_booster_switch_interactive"> <a href="#popup_interactive_booster" data-rel="popup"><img src="icons/ws/vent_ventilation_level_3.png" class="icon" /** onload="set_duration(2700) **/"></a> </br><small>Interactive</small> /** -----------> Todo: Popup fertigstellen, Restzeit einblenden **/ </div> /** Info popup **/ <div class="helios_info_button"> <a href="#popup_helios_info" data-rel="popup"><img src="icons/ws/message_info.png" class="icon"></a> </div> <div id="popup_helios_info" data-role="popup" class="helios_popup_info" data-overlay-theme="c"> <a href="#" data-rel="back" data-role="button" data-icon="delete" data-iconpos="notext" class="ui-btn-right";>Close</a> <span class="ui-btn-up-c helios_popup_header"> {{ info_popup_title }} </span> {% autoescape false %} {% for title,item in info_popup_items %} <span class="helios_infotable">{{ title }}<span style="float:right;">{{ basic.value(id~'_info_'~item, 'ventilation.'~item ) }}</span></span> {% endfor %} {% endautoescape %} </div> /** Quick 'n dirty UZSU logic testing tool: Simulate function of timer by triggering corresponding variable by hand **/ /** Important - variable currently not yet initialized properly, only works after 1st trigger! **/ {% if debug_mode %} <div class="helios_uzsutest_button"><a href="#popup-test-uzsu" data-rel="popup">UZSU Test</a></div> /** The popup **/ <div id="popup-test-uzsu" class="helios_popup_uzsutest" data-role="popup" data-overlay-theme="c"> <a href="#" data-rel="back" data-role="button" data-icon="delete" data-iconpos="notext" class="ui-btn-right";>Close</a> <span style="float:center;" class="ui-btn-up-c">{{ uzsu_tester_title }} {{ basic.value('helios_uzsu_tool', 'ventilation.fanspeed.fanspeed_uzsu') }}</span> <br/> {% for level in 0..8 %} {% set itemid = id~'_test_level_'~level %} {{ basic.button(itemid, 'ventilation.fanspeed.fanspeed_uzsu', level, '', level, 'mini') }} {% if level == 0 or level == 4 %} <br/><br/> {% endif %} {% endfor %} <br/> </div> {% endif %} /** ---------> aktuelle Arbeiten -------------------------------------------------------------------------------------------------------- **/ /** Here's the popup for the interactive booster mode **/ <div id="popup_interactive_booster" data-role="popup" class="helios_popup_booster_interactive" data-overlay-theme="c"> <a href="#" data-rel="back" data-role="button" data-icon="delete" data-iconpos="notext" class="ui-btn-right";>Close</a> <span style="float:center;" class="ui-btn-up-c">{{ booster_popup_title }}</span> <br/> <table><colgroup><col width=20% float="left"><col width=79% float="right"></colgroup> <tr> <td> Dauer:{% if debug_mode %}<br/>{{ basic.value(id~'_boost_duration_debug', 'ventilation.booster.logics.boost_duration') }}{% endif %} </td> <td> {{ _self.radiogroup(id~'_boost_duration', 'ventilation.booster.logics.boost_duration', ['15\'','30\'','45\'','1h','90\'','2h'], [900,1800,2700,3600,5400,7200]) }} </td> </tr> <tr> <td> Anheizen: {% if debug_mode %}<br/><small><i>{{ basic.value(id~'_fireplace_duration_debug', 'ventilation.booster.logics.fireplace_duration') }}</i></small>{% endif %} </td> <td> {{ _self.radiogroup(id~'_fireplace_duration', 'ventilation.booster.logics.fireplace_duration', ['Aus','15\'','30\''], [0,900,1800]) }} <br/> {{ _self.value_notzero('ein_Test', 'ventilation.booster.logics.boost_duration', '\'','') }} /** {{ _self.symbol_notzero('noch_ein_Test', 'ventilation.boost_remaining_a', helios_pic_dir~'/message_attention.png', 'MY ERROR TEXT!', 'http://www.google.de') }} **/ </td> </tr> </table> <br/><br/> <div class="helios_infotable"> Stufe: {{ basic.slider(id~'_boost_level_slider', 'ventilation.booster.logics.level', 1, 8, 1) }} </div> <br/><br/> Kamin: Abbluft-Motor herunterregeln auf xx%. <br/> <br/> [Start-Button]<br/> <br/> </div> </div> {% endmacro %} {% macro radiogroup(id, gad, labels, vals) %} /** ---------- Radio button macro ---------------- **/ {% set rid=uid(page,id) %} <span data-role="controlgroup" data-type="horizontal"> {% for nr in 0..labels|length-1 %} <span id="{{rid}}-button-{{nr}}" btn-id="{{rid}}_radio_{{nr}}" data-widget="helios.radiobutton" data-item="{{gad}}" data-val="{{vals[nr]}}"> <input type='radio' id='{{rid}}_radio_{{nr}}' name='{{rid}}_radio' value="{{labels[nr]}}" onclick="set_helios_value_{{id}}({{vals[nr]}})" data-mini="true"> /** <input data-mini="true" type='radio' id='{{rid}}_radio_{{nr}}' name='{{rid}}_radio' value="{{labels[nr]}}" onclick="io.write({{gad}}, {{vals[nr]}})"> **/ <label for='{{rid}}_radio_{{nr}}'>{{labels[nr]}}</label> </span> {% endfor %} </span> <script type="text/javascript"> function set_helios_value_{{id}}(newval) { io.write('{{gad}}', newval); // // alert('{{gad}}' + ' -> ' + newval); } $(document).delegate('span[data-widget="helios.radiobutton"]', { 'update': function(event, response) { if (response == $(this).attr('data-val')) { var targetbtn = $(this).attr('btn-id'); $("input[name='{{rid}}_radio']:checked").removeProp("checked"); $('#' + targetbtn).prop("checked",true); $('#' + targetbtn).click(); } }, }); </script> {% endmacro %} /** * Displays an item value if not 0 or empty * Useful for device alarm codes, count downs, timers (and probably more ...) * Optionally displays a specific string in case item is 0 or empty * * @param id a unique id for this widget * @param gad the gad/item * @param unit optional unit, like '\'' for remaining ' (minutes) in a count down * @param zerostr optional string if item is 0 or empty (like ---). by default a white space */ {% macro value_notzero(id, gad, unit, zerostr) %} <span id="{{ uid(page, id) }}" data-widget="helios.value_notzero" data-item="{{ gad }}" data-unit="{{ unit }}" data-zero-val="{{ zerostr|default(' ') }}">[text]</span> <script type="text/javascript"> $(document).delegate('span[data-widget="helios.value_notzero"]', { 'update': function(event, response) { if (response !=0 && response !="") { $('#' + this.id).html(response + $(this).attr('data-unit')); } else { $('#' + this.id).html($(this).attr('data-zero-val')); } }, }); </script> {% endmacro %} /** * Displays an icon if an item is not 0 or empty * Useful for device alarm codes, count downs, timers (and probably more ...) * Optionally displays a specific string as hint * Optionally links to a URL or Popup window on click * * @param id a unique id for this widget * @param gad the gad/item * @param img the icon * @param hint optional string for hint text * @param link optional link on click (use e.g. #mypopupname or http://www.mywebsite.com?args) */ {% macro symbol_notzero(id, gad, img, hint, link) %} <span id="{{ uid(page, id) }}" data-widget="helios.symbol_notzero" data-item="{{ gad }}">[symbol]</span> <script type="text/javascript"> $(document).delegate('span[data-widget="helios.symbol_notzero"]', { 'update': function(event, response) { head = ''; tail = ''; {% if link %} head = '<a class="ui-link" data-rel="popup" href="{{ link }}">'; tail = '</a>'; {% endif %} img = '<img class="icon" src="{{ img }}" title="{{ hint }}">'; invis_img = '<img class="icon" src="{{ img }}" style="opacity:0">'; if (response !=0 && response !="") { $('#' + this.id).html(head + img + tail); } else { $('#' + this.id).html(invis_img); } }, }); </script> {% endmacro %}
Den Debug Mode Wert finde ich noch die anderen aber leider nicht.Zuletzt geändert von MotteX; 18.08.2016, 21:26.
Einen Kommentar schreiben:
-
Hallo Reinhold,
das Dreieck zeigt einen notwendigen Filterwechsel an. Die Rückstellung geht in der Dir vorliegenden Version nur am Bedienteil (kommt mit der nächsten Version).
Der 'Interactive boost' ist ebenfalls noch nicht fertig. Bitte vorerst den in der Anlage fest eingebauten Modus verwenden. Dazu den Debugmodus des Widgets unter /var/WWW/smartvisu/widgets/Helios.html wie folgt ändern:
Die Ventilatoren sind wie von Vallox dokumentiert abgebildet. Wir haben später erst herausgefunden, dass die Register invertiert sind (0=an, 1=aus), und die Doku an dieser Stelle schlichtweg falsch ist. Ist in der neuen Version schon gefixed.Code:{% set debug_mode = [I][COLOR=#FF0000]false[/COLOR][/I] %} /** additional output (debugging) **/ {% set documentation_mode = [I][COLOR=#FF0000]false[/COLOR][/I] %} /** for screenshots only **/ {% set boost_mode = '[COLOR=#FF0000][I]1[/I][/COLOR]' %} /** 1=Helios, 2=Logic fixed, 3=Logic interactive **/
/tom
Edit: Nur der Vollständigkeit halber - boost mode = Stosslüftung bzw. Kaminlüftung.Zuletzt geändert von Tom Bombadil; 18.08.2016, 21:22.
Einen Kommentar schreiben:


Einen Kommentar schreiben: