Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. RunScript per socketio

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    RunScript per socketio

    This topic has been deleted. Only users with topic management privileges can see it.
    • apollon77
      apollon77 last edited by

      @smai:

      Sehe ich das richtig: Wenn in den Object-Metadaten common.type=boolean dann entspricht native.MIN = false/0 und native.MAX = true/1? `
      kann man so sagen

      1 Reply Last reply Reply Quote 0
      • G
        Gringo last edited by

        > Danke für das Feedback @Gringo, das freut mich.
        Immer gerne 😉
        > Und wie man bei HM sieht, ist es auch in ioBroker nicht zwingend true/false. Z.B. mit dem KNX-Adapter hat 1/0 gepasst, da hat der ETS-Import die Objekte mit 1/0 und nicht true/false angelegt.
        Davon bin ich ausgegangen darum war ich etwas verwundert das es nicht funktioniert.
        > Sehe ich das richtig: Wenn in den Object-Metadaten common.type=boolean dann entspricht native.MIN = false/0 und native.MAX = true/1?
        Ok, das wusste ich nicht. Habe noch in keinen Adapter reingeschaut, da mir großteils wohl noch das Verständnis fehlt um zu begreifen was darin abläuft geschweige wie man einen Adapter schreibt.

        Etwas abseits vom Thema, ich werde im laufe der Woche die Übersetzung für Brasilianisches Portugiesisch fertig machen. Wenn die Test gut verlaufen könnte ich die Dateien zur Verfügung stellen wenn es erwünscht ist.

        1 Reply Last reply Reply Quote 0
        • S
          smai last edited by

          @Gringo:

          Etwas abseits vom Thema, ich werde im laufe der Woche die Übersetzung für Brasilianisches Portugiesisch fertig machen. Wenn die Test gut verlaufen könnte ich die Dateien zur Verfügung stellen wenn es erwünscht ist. `
          Klar, sehr gerne.

          Am besten per Pull Request auf GitHub (in den develop branch), dann bist du als Autor vermerkt. Falls dir dax zu umständlich ist, kannst du es aber auch einfach hier anhängen.

          1 Reply Last reply Reply Quote 0
          • TJJochen
            TJJochen last edited by

            @Gringo:

            Solltest du noch Probleme damit haben, du musst dem Switch die Werte für "on" und "off" mitgeben da per default 0 oder 1 geschickt wird. Da es bei deinem Device um ein HM handelt sollte es dann für on true sein und für off false. `
            Hallo Gringo,

            vielen Dank für deine Unterstützung. Ja ich hatte zwischenzeitlich raus gefunden, dass ich den HM Geräten "True" oder "False" mitgeben muss. Hatte ich direkt in der SmartVISU anstelle der "1" oder der "0" eingetragen, dann ging es.

            Leider hänge ich derzeit an dem "Shutter Widget" fest. Ich kann hier nicht die Buttons so übergeben, dass die Jalousien fahren. Vermutlich ist hier ebenfalls das Problem, das ich "1" oder "0" nicht an den HM Jalousieaktor übergeben kann. Ich habe schon alle möglichen Varianten versucht, einzig wenn ich direkt in das "Bild" oben oder unten klicke, dann fährt die Jalousie.

            4007_jalousie_1.png

            
            ### Jalousie Essbereich Balkontür
            
                        {% import "widget_shutter.html" as shutter %}
            
                                 {{ shutter.one ('Essbereich_Jalousie_Balkontuer', 'Balkon Rechts', 'hm-rpc.0.NEQ1321693.1.WORKING', 'hm-rpc.0.NEQ1321693.1.STOP', 'hm-rpc.0.NEQ1321693.1.LEVEL', 'hm-rpc.0.NEQ1321693.1.LEVEL', 50) }} |
            
            

            4007_iobroker_jalousie.png

            Der Standard Gerüst des verwendetetn Shutter Widgets sieht so aus:

            {% macro one (id, txt, gad_move, gad_stop, gad_pos, gad_shade, shade_value ) %}
            

            Einzig der Button für die Fixe Position````
            gad_shade, shade_value

            
            Aber die Auf, Stop, und Ab Buttons haben keine Funktion…
            
            Hast du vielleicht da eine Idee für mich, bzw. setzt hier jemand die HM Jalousie Aktoren ein?
            
            @Smai Wollte mich auch noch bei dir für deine Mühe mit dem ioSocket Treiber und die Unterstützung bedanken :-)
            
            Vielen Dank
            
            Schöne Grüße
            
            Jochen
            1 Reply Last reply Reply Quote 0
            • TJJochen
              TJJochen last edited by

              Ich habe da aber noch eine Frage in die Runde…

              Ich hänge zudem an einer Plot Darstellung meines Temperatur-Verlaufs z.b. im Wohnbereich.

              Ich würde gerne sowas hier darstellen können:

              4007_plot_rtr.png

              Laut der Doku der SmartVISU benötige ich hierfür folgende Einbindung:

              > {{ plot.rtr(id, item_actual, item_set, item_state, count) }}

              Da ich die Objekte für die Aktuelle Temperatur und für die Sollwert Temperatur ja im IOBroker mittels dem history Adapter speichern kann,

              stellt sich mir hier aber die Frage, wie ich dann an diese gespeicherten Daten herankomme um diese in der SmartVISU zu übergeben?

              Hat da vielleicht jemand einen wertvollen Tipp?

              1 Reply Last reply Reply Quote 0
              • G
                Gringo last edited by

                @TJJochen:

                @Gringo:

                Solltest du noch Probleme damit haben, du musst dem Switch die Werte für "on" und "off" mitgeben da per default 0 oder 1 geschickt wird. Da es bei deinem Device um ein HM handelt sollte es dann für on true sein und für off false. `
                Hallo Gringo,

                vielen Dank für deine Unterstützung. Ja ich hatte zwischenzeitlich raus gefunden, dass ich den HM Geräten "True" oder "False" mitgeben muss. Hatte ich direkt in der SmartVISU anstelle der "1" oder der "0" eingetragen, dann ging es.

                Leider hänge ich derzeit an dem "Shutter Widget" fest. Ich kann hier nicht die Buttons so übergeben, dass die Jalousien fahren. Vermutlich ist hier ebenfalls das Problem, das ich "1" oder "0" nicht an den HM Jalousieaktor übergeben kann. Ich habe schon alle möglichen Varianten versucht, einzig wenn ich direkt in das "Bild" oben oder unten klicke, dann fährt die Jalousie.

                Jalousie 1.PNG

                
                    
                
                        
                            
                
                ### Jalousie Essbereich Balkontür
                
                            {% import "widget_shutter.html" as shutter %}
                            
                
                                
                
                                     {{ shutter.one ('Essbereich_Jalousie_Balkontuer', 'Balkon Rechts', 'hm-rpc.0.NEQ1321693.1.WORKING', 'hm-rpc.0.NEQ1321693.1.STOP', 'hm-rpc.0.NEQ1321693.1.LEVEL', 'hm-rpc.0.NEQ1321693.1.LEVEL', 50) }} |
                                
                
                        
                	
                	
                

                iobroker_Jalousie.PNG

                Der Standard Gerüst des verwendetetn Shutter Widgets sieht so aus:

                {% macro one (id, txt, gad_move, gad_stop, gad_pos, gad_shade, shade_value ) %}
                

                > Dieses Gerüst deutet darauf hin daß das Wiget speziell für SmarthomeNG oder FHEM geschrieben wurde. Das "gad" wird in SmarthomeNG und FHEM verwendet. Wenn du die eingebundene html ansiehst wirst du sehen das es in zusammenhang mit KNX geschrieben wurde. Es kann mit ioBroker funktionieren, muss aber nicht.

                Einzig der Button für die Fixe Position````
                gad_shade, shade_value

                
                Aber die Auf, Stop, und Ab Buttons haben keine Funktion…
                
                Hast du vielleicht da eine Idee für mich, bzw. setzt hier jemand die HM Jalousie Aktoren ein?
                  ` > Ich habe leider keine Jalousie Aktoren zum nachstellen. Ich würde zuerst die Widgets aus der Docu verwenden (nicht aus den Beispielprojekten), die sollten funktionieren wenn die Befehle (true, 1 etc.) richtig gesendet werden.
                > 
                > Hier die Beispiele aus der Doku solltest sie noch nicht gesehen haben.
                >  ![4173_auswahl_001.png](/assets/uploads/files/4173_auswahl_001.png) 
                >  ![4173_auswahl_002.png](/assets/uploads/files/4173_auswahl_002.png)  `  
                
                @Smai Wollte mich auch noch bei dir für deine Mühe mit dem ioSocket Treiber und die Unterstützung bedanken :-)
                
                Vielen Dank
                
                Schöne Grüße
                
                Jochen ` 
                1 Reply Last reply Reply Quote 0
                • G
                  Gringo last edited by

                  @TJJochen:

                  Ich habe da aber noch eine Frage in die Runde…

                  Ich hänge zudem an einer Plot Darstellung meines Temperatur-Verlaufs z.b. im Wohnbereich.

                  Ich würde gerne sowas hier darstellen können:

                  Plot_RTR.PNG

                  Laut der Doku der SmartVISU benötige ich hierfür folgende Einbindung:

                  > {{ plot.rtr(id, item_actual, item_set, item_state, count) }}

                  Da ich die Objekte für die Aktuelle Temperatur und für die Sollwert Temperatur ja im IOBroker mittels dem history Adapter speichern kann,

                  stellt sich mir hier aber die Frage, wie ich dann an diese gespeicherten Daten herankomme um diese in der SmartVISU zu übergeben?
                  > Wenn für die Datenpunkte der history Adapter bereits aktiviert wurde musst du nichts weiter tun als den Datenpunkt in smarvisu anzugeben. Die Daten sollten dann automatisch gesendet werden. Wenn der history Adapter erst vor kurzem aktiviert wurde musst dich ein wenig gedulden bis genügend Daten geloggt wurden damit der Plot angezeigt wird.
                  Hat da vielleicht jemand einen wertvollen Tipp? `

                  1 Reply Last reply Reply Quote 0
                  • S
                    smai last edited by

                    @TJJochen:

                    Da ich die Objekte für die Aktuelle Temperatur und für die Sollwert Temperatur ja im IOBroker mittels dem history Adapter speichern kann,

                    stellt sich mir hier aber die Frage, wie ich dann an diese gespeicherten Daten herankomme um diese in der SmartVISU zu übergeben?

                    Hat da vielleicht jemand einen wertvollen Tipp? `
                    Einfach den Namen des Objects angeben, wie bei normalen Widgets auch. Die smartVISU weiss, bei welchen Widgets sie den aktuellen Wert und bei welchen die History anforndern muss.

                    1 Reply Last reply Reply Quote 0
                    • TJJochen
                      TJJochen last edited by

                      > Wenn für die Datenpunkte der history Adapter bereits aktiviert wurde musst du nichts weiter tun als den Datenpunkt in smarvisu anzugeben. Die Daten sollten dann automatisch gesendet werden. Wenn der history Adapter erst vor kurzem aktiviert wurde musst dich ein wenig gedulden bis genügend Daten geloggt wurden damit der Plot angezeigt wird.

                      Hallo Gringo, danke für deine antwort 🙂

                      vielleicht bin ich ja zu ungeduldig, aber ich habe jetzt Aufzeichnungen der vergangenen 12 Stunden im History Adapter (Werteaufzeichnung alle 300s) aber der Plot in der SmartVISU wird immer noch nicht dargestellt. Vielleicht habe ich ja einen Fehler in meiner Vorgehensweise.

                      1. HM-TC-IT-WM-W-EU Raum Wandthermostat wird mir unter hm-rpc.0 in IOBroker angezeigt.

                      2. Hier habe ich unter Kanal2 die ACTUAL_TEMPERATURE und die SET_TEMPERATURE Datenpunkte für den history Adapter mit folgenden Einstellungen aktiviert.

                      4007_history1.png

                      3. Alle 5 Minuten (300s) werden Daten auch ohne Änderungen im history geschrieben

                      4007_history2.png

                      4. Die Objectnamen (ACTUAL_TEMPERATURE und die SET_TEMPERATURE) habe ich in der SmartVISU eingebunden.

                      4007_smartvisu1.png

                      Aber auch nach fast 12 Stunden erscheint der Plot leider so…

                      4007_smartvisu2.png

                      /**
                      * A temperature-chart for use with an rtr. Plots actual and set temperature. If the state is given it will be shown as pie.
                      *
                      * @param {id=} unique id for this widget (optional)
                      * @param {item} series of an item for the actual-temperature
                      * @param {item} series of an item for the set-temperature
                      * @param {item} series of an item for the state of the actor. It is shown as percental value within the pie. (> 0 is considered as 'on')
                      * @param {value=100} number of samples (points) (optional, default 100)
                      */
                      {% macro rtr(id, item_actual, item_set, item_state, count) %}
                      
                      	 <div{% if/not/id/is/empty/%}/{%/endif/data-widget="plot.rtr" data-item="{{ implode([item_actual, item_set, item_state], ['avg', '1d', 'now', count|default(100)]) }}" data-step="50" data-label="{{ lang('plot.rtr', 'label') }}" data-axis="{{ lang('plot.rtr', 'axis') }}" class="plot">{% endmacro %}</div{%>
                      

                      Die 100 Datenpunkte sind im History Adapter bereits lange erreicht.

                      Was könnte hier noch der Fehler sein?

                      Schöne Grüße

                      Jochen

                      1 Reply Last reply Reply Quote 0
                      • S
                        smai last edited by

                        Der 4. Parameter sollte ein Object oder ein Leerstring ('') sein, niczt eine '1'.

                        1 Reply Last reply Reply Quote 0
                        • G
                          Gringo last edited by

                          Ich habe mich gerade auch an dem rtr Plot versucht, leider ohne Erfolg. Zuerst hatte ich Mysql im verdacht aber da alle anderen Plots laufen kann es daran nicht liegen. Selbst mit den gleichen Datenpunkten von den anderen Plots funktioniert der rtr Plot nicht.
                          4173_auswahl_001.png
                          An der Syntax kann es auch nicht liegen, Datenpunkte habe ich verschiedene verwendet sowohl mit und ohne item_state bzw count.

                          Das ist der Letztstand

                          
                          ### RTR Plot
                          
                                 {{ plot.rtr('RTRPlot', 'mqtt.0.AuWetter.BME280.Temperature', 'mqtt.0.EG_WR_Sensor2.DHT22.Temperature', '') }}
                          
                          

                          Ich werde das mit FHEM versuchen nachzustellen ob das gleiche Problem auftritt. Zur Zeit habe sonst keine Idee mehr woran es liegen kann.

                          1 Reply Last reply Reply Quote 0
                          • S
                            smai last edited by

                            Ich nutze selbst plot.rtr auch nicht, kann mir den aber mal anschauen.

                            In FHEM funktionierdn doch gar keine History-Werte, soweit ich weiss.

                            1 Reply Last reply Reply Quote 0
                            • TJJochen
                              TJJochen last edited by

                              Muss tatsächlich an dem plot.rtr liegen. Mit einem plot.multiaxis funktioniert es direkt auf anhieb 🙂

                              4007_bildschirmfoto_2018-01-14_um_21.08.43.png

                              1 Reply Last reply Reply Quote 0
                              • TJJochen
                                TJJochen last edited by

                                @Gringo @smai

                                Hallo SmartVISU Freunde…

                                Habe seit längerem wieder einmal Zeit und versuche mich gerade an einem neuen Projekt.

                                Ich würde gerne mein Sonos System über die SmartVISU mit IOBroker steuerbar machen.

                                Ich habe hier auch ein tolles Widget von ddtlabs gefunden https://github.com/ddtlabs/smartvisu-wi … ster/sonos

                                das aber allerdings für FHEM in Verbindung mit dem Fronthem Treiber geschrieben wurde.
                                4007_sonos.png

                                Ich habe das Widget einmal testweise in die SmartVISU 2.9 eingebunden habe aber jetzt keine Ahnung, wo ich jetzt die Datenpunkte aus IOBroker in der html. des Widgets einsetzen muss.

                                /**
                                            ____                                          
                                  _   _    / ___|    ___    _ __     ___    ___     _   _ 
                                 (_) (_)   \___ \   / _ \  | '_ \   / _ \  / __|   (_) (_)
                                  _   _     ___) | | (_) | | | | | | (_) | \__ \    _   _ 
                                 (_) (_)   |____/   \___/  |_| |_|  \___/  |___/   (_) (_)
                                
                                */
                                
                                /** ----------------------------------------------------------------------------
                                * Sonos(r,c) Multimedia Player
                                *
                                * @param id: unique id for this widget, no default, mandatory
                                * @param gad: gad name, no default, mandatory
                                * @param neighbors:  array of other Sonos neighbour speakers. eg: ['Sonos_Studio', 'Sonos_Wohnzimmer'], no default, optional
                                * @param radiolist_header: header for radio list
                                * @param playlist_header: header for play list
                                *
                                * @author and copyright dev0
                                ------------------------------------------------------------------------------*/
                                
                                {% macro player(id, gad, neighbors) %}
                                
                                /** set your preferences here */
                                
                                  {% set prefix           = 'mm_' %}                  /** prefix used for all gad items */
                                  {% set text_volume      = 'Volume of neighbors'%}   /** description within neighbors popup */
                                  {% set radiolist_header = 'Radios' %}               /** radiolist button title */
                                  {% set playlist_header  = 'Playlists' %}            /** playlist button title */
                                
                                /** do not modify anything below, as long as you know what you are dong */
                                
                                  {% set version        = '0.91'%}
                                  {% set defCoverArtUrl = 'pages/base/pics/sonos_empty.jpg' %}
                                  {% set uid            = uid(page, id) %}
                                
                                  {% set gad            = prefix~gad %}                /** use 'Direct' converter in GAD editor */
                                  {% set state          = '.state' %}                  /** use 'Direct' converter in GAD editor */
                                  {% set volume         = '.volume' %}                 /** use 'Direct' converter in GAD editor */
                                  {% set artist         = '.currentArtist' %}          /** use 'Direct' converter in GAD editor */
                                  {% set title          = '.currentTitle' %}           /** use 'Direct' converter in GAD editor */
                                  {% set album          = '.currentAlbum' %}           /** use 'Direct' converter in GAD editor */
                                  {% set trackDuration  = '.currentTrackDuration' %}   /** use 'Direct' converter in GAD editor */
                                  {% set radioSender    = '.currentSender' %}          /** use 'Direct' converter in GAD editor */
                                  {% set radioShow      = '.currentSenderCurrent' %}   /** use 'Direct' converter in GAD editor */
                                  {% set radioInfo      = '.currentSenderInfo' %}      /** use 'Direct' converter in GAD editor */
                                  {% set mute           = '.Mute' %}                   /** use 'Direct' converter in GAD editor */
                                  {% set repeat         = '.Repeat' %}                 /** use 'Direct' converter in GAD editor */
                                  {% set shuffle        = '.Shuffle' %}                /** use 'Direct' converter in GAD editor */
                                  {% set playlist       = '.Playlist' %}               /** use 'Direct' converter in GAD editor */
                                  {% set radiolist      = '.Radiolist' %}              /** use 'Direct' converter in GAD editor */
                                  {% set loudness       = '.Loudness' %}               /** use 'Direct' converter in GAD editor */
                                  {% set crossfade      = '.CrossfadeMode' %}          /** use 'Direct' converter in GAD editor */
                                  {% set addMember      = '.AddMember' %}              /** use 'Direct' converter in GAD editor */
                                  {% set remMember      = '.RemoveMember' %}           /** use 'Direct' converter in GAD editor */
                                  {% set bass           = '.Bass' %}                   /** use 'Direct' converter in GAD editor */
                                  {% set treble         = '.Treble' %}                 /** use 'Direct' converter in GAD editor */
                                  {% set balance        = '.Balance' %}                /** use 'Direct' converter in GAD editor */
                                  {% set roomName       = '.roomName' %}               /** use 'Direct' converter in GAD editor */
                                
                                  {% set isInAnyGroup   = '.svIsInAnyGroup' %}         /** Coverter: SonosGroup */
                                  {% set hasClient      = '.svHasClient' %}            /** Coverter: SonosGroup */
                                  {% set trackPos       = '.svTrackPosition' %}        /** Coverter: SonosTrackPos */
                                  {% set coverUrl       = '.currentAlbumArtURL' %}     /** Coverter: SonosAlbumArtURL */
                                
                                  {% set transportStateStop  = '.svTransportStateStop' %}    /** Coverter: SonosTransportState */
                                  {% set transportStatePlay  = '.svTransportStatePlay' %}    /** Coverter: SonosTransportState */
                                  {% set transportStatePause = '.svTransportStatePause' %}   /** Coverter: SonosTransportState */
                                
                                  {% import "basic.html" as basic %}
                                  {% import "widget_ddtlabs_sonos.html" as ddtlabs_int_sonos %}
                                
                                      ![](pages/base/pics/scale_buttomup.png)
                                      {{ ddtlabs_int_sonos.slider(id~volume, gad~volume, 0, 100, 1, 'bottomup') }}
                                
                                     |
                                
                                       {{ ddtlabs_int_sonos.cover(id~coverUrl, gad~coverUrl, defCoverArtUrl) }}
                                
                                    {{ basic.slider(id~trackPos, gad~trackPos, 0, 100, 1) }}
                                
                                    {{ basic.symbol(id~gad~transportStatePause~Symbol, gad~transportStatePause, '', 'audio_pause.svg', '1', '', 'red') }}
                                
                                     |
                                
                                    {{ basic.value(id~radioSender, gad~radioSender, '', '') }}
                                    {{ basic.value(id~artist, gad~artist, '', '') }} 
                                   |
                                
                                    {{ basic.value(id~radioInfo, gad~radioInfo, '', '') }}
                                    {{ basic.value(id~album, gad~album, '', '') }} 
                                   |
                                
                                    {{ basic.value(id~radioShow, gad~radioShow, '', '') }}
                                    {{ basic.value(id~title, gad~title, '', '') }} 
                                   |
                                
                                        {{ ddtlabs_int_sonos.selectmenu(id~'playlist', gad~playlist, playlist_header) }}
                                       | 
                                        {{ ddtlabs_int_sonos.selectmenu(id~'radiolist', gad~radiolist, radiolist_header) }}
                                       |
                                
                                   |
                                
                                      {% for neighbor in neighbors%}
                                
                                      {% endfor %}
                                
                                        {{ basic.dual(id~gad~isInAnyGroup, gad~isInAnyGroup, 'my_audio_group_empty.svg', 'my_audio_group_fault.svg', '1', '0', 'mini') }} 
                                       | 
                                        {{ basic.dual(id~addMember~'.'~neighbor, gad~hasClient~'_'~neighbor, 'my_audio_group_'~neighbor~'.svg', 'my_audio_group_'~neighbor~'.svg', '1', '0') }} 
                                       | 
                                        [![]({{ icon0~'audio_eq.svg' }})](#{{id}}ddtlabs_sonos_popup) 
                                
                                          [Close](#)
                                
                                          Sonons Widget v{{version}}
                                
                                            {% for neighbor in neighbors%}
                                
                                            {% endfor %}
                                
                                | Sonos {{ basic.value(id~gad~roomName, gad~roomName, '', '') }}: |
                                
                                | Bass |      {{ basic.slider(id~bass, gad~bass, -10, 10, 1, '') }} |
                                
                                | Treble |    {{ basic.slider(id~gad~treble, gad~treble, -10, 10, 1, '') }} |
                                
                                | Balance |   {{ basic.slider(id~gad~balance, gad~balance, -100, 100, 1, '') }} |
                                
                                |  |
                                
                                | {{text_volume}}: |
                                
                                               {{ basic.value(id~prefix~neighbor~roomName, prefix~neighbor~roomName, '', '') }} |
                                               {{ ddtlabs_int_sonos.slider(id~prefix~neighbor~'volumePop', prefix~neighbor~volume, 0, 100, 1, '') }} |
                                
                                       |
                                
                                   |
                                
                                    {{ basic.dual(id~mute, gad~mute, 'audio_volume_mute.svg', 'audio_volume_mid.svg', 1, 0, 'mini') }}
                                
                                   |
                                
                                    {{ basic.button(id~'_prev', gad~state, 'Prev', 'control_arrow_left.svg', 'Previous') }}
                                    {{ basic.dual(id~gad~'_playX',  gad~transportStatePlay, 'audio_play.svg', 'audio_play.svg', '1', '0', '') }}
                                    {{ basic.dual(id~gad~'_stopX',  gad~transportStateStop, 'audio_stop.svg', 'audio_stop.svg', '1', '0', '') }}
                                    {{ basic.button(id~'_next', gad~state, 'Next', 'control_arrow_right.svg', 'Next') }}
                                
                                   |
                                
                                      {{ basic.dual(id~repeat, gad~repeat, 'audio_repeat.svg', 'audio_repeat.svg', 1, '0') }} 
                                     |
                                
                                      {{ basic.dual(id~shuffle, gad~shuffle, 'audio_shuffle.svg', 'audio_shuffle.svg', 1, '') }} 
                                     |
                                
                                      {{ basic.dual(id~loudness, gad~loudness, 'audio_loudness.svg', 'audio_loudness.svg', 1, 0, 'mini') }} 
                                     |
                                
                                      {{ basic.dual(id~crossfade, gad~crossfade, 'audio_fade.svg', 'audio_fade.svg', 1, 0, 'mini') }} 
                                     |
                                
                                   |
                                
                                {% endmacro %}
                                
                                /** ----------------------------------------------------------------------------
                                * Display cover/logo
                                *
                                * @param id: unique id
                                * @param src: url to image
                                * @param prefix: should be emtpy
                                ------------------------------------------------------------------------------*/
                                
                                {% macro cover(id, src, defCoverArtUrl) %}
                                ![]({{ defCoverArtUrl }})
                                {% endmacro %}
                                
                                /** ----------------------------------------------------------------------------
                                * Selectmenu_static for status.collopse
                                *
                                * @param id: unique id for this widget
                                * @param gad: gad for this widget
                                * @param items: array of playlists
                                * @param label: lable for this widget
                                ------------------------------------------------------------------------------*/
                                
                                {% macro selectmenu_static(id, gad, items, label, selected, urlencode) %}
                                 <a class="ui-btn-inline ui-mini selectmenu"><select name="{{ uid(page, id) }}" id="{{ uid(page, id) }}" data-widget="ddtlabs_sonos.selectmenu_static" data-item="{{ gad }}" data-native-menu="false" data-placeholder="false" data-mini="true" class="selectmenu">{% for item in items %}
                                      {% if urlencode %}
                                        <option value="{{ item[1]|url_encode }}">{{ item[0] }}</option>
                                      {% else %}
                                        <option value="{{ item[1] }}">{{ item[0] }}</option>
                                      {% endif %}
                                    {% endfor %}
                                    <option selected="">{{ selected }}</option></select></a> 
                                {% endmacro %}
                                
                                /** ----------------------------------------------------------------------------
                                * Selectmenu for Playlists/Radios
                                *
                                * @param id: unique id for this widget
                                * @param gad: gad for this widget
                                * @param label: lable for this widget
                                * @thanx to raman (https://forum.fhem.de/index.php/topic,54768.0.html)
                                ------------------------------------------------------------------------------*/
                                
                                {% macro selectmenu(id, gad, label) %}
                                  <a class="ui-btn-inline ui-mini select"></a> 
                                {% endmacro %}
                                
                                /** ----------------------------------------------------------------------------
                                * Displays a slider-control
                                *
                                * @param unique id for this widget
                                * @param a item
                                * @param the minimum value if the slider is moved to total left (optional, default 0)
                                * @param the maximum value if the slider is moved to total right (optional, default 255)
                                * @param step between two values (optional, default 5)
                                * @param the orientation ('none', 'vertical', 'bottomup', 'semicircle')
                                * @info modified: 800ms delay for volume slider
                                ------------------------------------------------------------------------------*/
                                
                                {% macro slider(id, item, min, max, step, mode) %}
                                
                                {% endmacro %}
                                
                                /** ----------------------------------------------------------------------------
                                * Displays a presence button
                                *
                                * @param id: unique id for this widget
                                * @param player: player name
                                * @param prefix: prefix for playername
                                * @param color_present: color for present state
                                * @param color_absent: color for absent state
                                ------------------------------------------------------------------------------*/
                                
                                {% macro presence(id, player, prefix, color_present, color_absent) %}
                                  {% import "basic.html" as basic %}
                                  {% set prefix = prefix|default('mm_') %}
                                  {% set color_present = color_present|default('black') %}
                                  {% set color_absent  = color_absent|default('red') %}
                                
                                  {{ basic.symbol('id_'~id~'_present',   prefix~player~'.presence', '', 'control_clear.svg',  'appeared',            '', color_present) }}
                                  {{ basic.symbol('id_'~id~'_absent',    prefix~player~'.presence', '', 'control_on_off.svg', 'disappeared',         '', color_absent) }}
                                  {{ basic.symbol('id_'~id~'_notLoaded', prefix~player~'.presence', '', 'control_on_off.svg', '~~NotLoadedMarker~~', '', color_absent) }}
                                {% endmacro %}
                                
                                

                                Das Widget wird mit folgendem Code als Block in der SmartVISU dargestellt:

                                {% import "widget_ddtlabs_sonos.html" as ddtlabs_sonos %}
                                
                                ### Sonos Studio {{ ddtlabs_sonos.presence('sonos_studio', 'Sonos_Studio') }} 
                                
                                | 
                                        {{ ddtlabs_sonos.player('sonos_studio', 'Sonos_Studio', ['Sonos_Kitchen', 'Sonos_Wohnzimmer']) }}
                                			 |
                                
                                ### Sonos Wohnzimmer {{ ddtlabs_sonos.presence('sonos_wohnzimmer', 'Sonos_Wohnzimmer') }} 
                                
                                | 
                                        {{ ddtlabs_sonos.player('sonos_wohnzimmer', 'Sonos_Wohnzimmer', ['Sonos_Kitchen', 'Sonos_Studio']) }}
                                			 |
                                
                                ### Sonos Kitchen {{ ddtlabs_sonos.presence('sonos_kitchen', 'Sonos_Kitchen') }} 
                                
                                | 
                                        {{ ddtlabs_sonos.player('sonos_kitchen', 'Sonos_Kitchen', ['Sonos_Wohnzimmer', 'Sonos_Studio']) }}
                                			 |
                                
                                /** Note: radio stations must be added to Sonos "My Radiostations" to work with FHEM's Sonos Modules */
                                

                                Was ich in der Anleitung von ddtlabs noch nicht ganz verstehe, was mit der "Widget declaration" gemeint ist:

                                /**
                                * Sonos(r) Multimedia Player
                                *
                                * @param id: unique id for this widget, no default, mandatory
                                * @param gad: gad name, no default, mandatory
                                * @param neighbors:	array of other Sonos neighbour speakers. eg: ['Sonos_Studio', 'Sonos_Wohnzimmer'], no default
                                * @author dev0
                                */
                                
                                {% macro player(id, gad, neighbors) %}
                                

                                Wo oder auf welcher Seite muss das eingefügt werden?

                                Generell gefragt, geht das überhaupt so, wie ich mir das vorstelle oder bin ich da total auf dem Holzweg und würde das nur mit Frothem und FHEM funktionieren?

                                Bekommt man das irgendwie auf IOBroker umgebaut?

                                Ich danke euch mal wieder für jede Hilfe 🙂

                                Gruß

                                Jochen

                                1 Reply Last reply Reply Quote 0
                                • First post
                                  Last post

                                Support us

                                ioBroker
                                Community Adapters
                                Donate
                                FAQ Cloud / IOT
                                HowTo: Node.js-Update
                                HowTo: Backup/Restore
                                Downloads
                                BLOG

                                829
                                Online

                                31.9k
                                Users

                                80.1k
                                Topics

                                1.3m
                                Posts

                                6
                                36
                                4158
                                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