Ankündigung

Einklappen
Keine Ankündigung bisher.

Basic.stateswitch - icons/Bilder aus html link anzeigen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Zitat von schuma Beitrag anzeigen
    Ach so, noch eine Frage ;-)
    wenn ich das .next einsetze, funktioniert das mit den Logos in der Controlgroup unter Windows/Chrom perfekt. Aber unter IOS auf dem Handy wird immer der letzte Button in die nächste Zeile umgebrochen. Wobei es auch egal ist wieviele Button im Einsatz sind.

    Ich hab das jetzt erstmal so gelöst, dass ich die Button aus der Controlgroup genommen habe. Das funktioniert auf beiden Systemen.

    Hast Du dazu eine Lösung?

    Grüße, Marc
    Sorry, die Frage hatte ich übersehen. Willst Du mal den Code mit der Controlgroup hier posten, der Probleme macht? Dann kann ich das mal testen.

    Ich habe die Anleitung für die Hacks mit basic.print nochmal erweitert. Es ist auch ein Beispiel zum Selektor für basic.trigger dabei und der Vollständigkeit halber ist jetzt auch beschrieben, wie man das mit den internen, eingebetteten icons macht.

    Über die Logik mache ich mir mal Gedanken. Da habe ich aber nicht viel Erfahrung.

    Gruß
    Wolfram


    Zuletzt geändert von wvhn; 21.04.2024, 14:48.

    Kommentar


      #17
      Moin Wolfram, ja gerne.
      Hier der Code aus dem Widget:
      Code:
                      {{ status.collapse('KStation', item_alexa~'.Kurzwahl') }}
                      <div class="hide" data-bind="KStation">
                          <hr>
                          <span  data-role="controlgroup" data-type="horizontal">*/
                              {{ basic.stateswitch('AStation1', item_alexa~'.Station', '', 1, 'https://cdn-radiotime-logos.tunein.com/s255597g.png', '', '', '', '#popupsetup1') }}
                              {{ basic.print('', item_alexa~'.Sender.SenderLogo.Logo1','script','$("#'~page~'-AStation1").next("a").find("img.icon").attr("src", VAR1);') }}
                              {{ basic.stateswitch('AStation2', item_alexa~'.Station', '', 2, 'https://cdn-profiles.tunein.com/s8954/images/logod.png', '', '', '', '#popupsetup2') }}
                              {{ basic.print('', item_alexa~'.Sender.SenderLogo.Logo2','script','$("#'~page~'-AStation2").next("a").find("img.icon").attr("src", VAR1);') }}
                              {{ basic.stateswitch('AStation3', item_alexa~'.Station', '', 3, 'https://cdn-profiles.tunein.com/s56857/images/logod.png', '', '', '', '#popupsetup3') }}
                              {{ basic.print('', item_alexa~'.Sender.SenderLogo.Logo3','script','$("#'~page~'-AStation3").next("a").find("img.icon").attr("src", VAR1);') }}
                              {{ basic.stateswitch('AStation4', item_alexa~'.Station', '', 4, 'https://cdn-profiles.tunein.com/s6642/images/logod.png', '', '', '', '#popupsetup4') }}
                              {{ basic.print('', item_alexa~'.Sender.SenderLogo.Logo4','script','$("#'~page~'-AStation4").next("a").find("img.icon").attr("src", VAR1);') }}
                              {{ basic.stateswitch('AStation5', item_alexa~'.Station', '', 5, 'https://cdn-profiles.tunein.com/s25531/images/logod.png', '', '', '', '#popupsetup5') }}
                              {{ basic.print('', item_alexa~'.Sender.SenderLogo.Logo5','script','$("#'~page~'-AStation5").next("a").find("img.icon").attr("src", VAR1);') }}
                          </span>*/
                          <div id="popupsetup1" data-role="popup">
                              <a href="#" data-rel="back" data-role="button" data-icon="delete" data-iconpos="notext" class="ui-btn-right">Close</a>
                              <h2 align=center>Sender 1 speichern</h2>
                              <table width="100%">
                                  <tr><td height="5px"></td><td></td></tr>
                                  <tr>
                                      <td>Nr: </td>
                                      <td align=center width="95px">{{ basic.input('', item_alexa~'.Sender.SenderNr.Setup1', 'text') }}</td>
                                      <td>Name: </td>
                                      <td align=center width="95px">{{ basic.input('', item_alexa~'.Sender.SenderName.Setup1', 'text') }}</td>
                                      <td width="30px">{{ basic.stateswitch('', item_alexa~'.Sender.speichern', 'mini', '101', 'audio_rec.svg', '', '#f00', 'blink') }}</td>
                                  </tr>
                              </table>
                              <br>
                              <table width="100%">
                                  <tr>
                                      <td width="150px" align=center>Logo Version: {{ basic.print('', item_alexa~'.Sender.SenderLogo.Logo1.Art') }}</td>
                                      <td width="30px"></td>
                                      <td>Lokales Bild: </td>
                                  </tr><tr>
                                      <td>
                                          <span data-role="controlgroup" data-type="horizontal">
                                              {{ basic.stateswitch('', item_alexa~'.Sender.SenderLogo.Logo1.Art', 'mini', 1, '', 'HTML 1', '', 'blink') }}
                                              {{ basic.stateswitch('', item_alexa~'.Sender.SenderLogo.Logo1.Art', 'mini', 2, '', 'HTML 2', '', 'blink') }}
                                              {{ basic.stateswitch('', item_alexa~'.Sender.SenderLogo.Logo1.Art', 'mini', 3, '', 'Bild 3', '', 'blink') }}
                                          </span>
                                      </td>
                                      <td align=center>-></td>
                                      <td>{{ basic.input('', item_alexa~'.Sender.SenderLogo.Logo1.Lokal', 'text') }}</td>
                                  </tr>
                              </table>
                          </div>​
      Ich habe jetzt nur ein Popup dazu genommen, damit das hier nicht zu viel wir. Die anderen sind identisch mit dem entsprechend aufnummerierten Items.

      Grüße, Marc

      Kommentar


        #18
        wvhn Das mit der Logik würde ich im Ansatz so lösen, das ich den Auslöser untersuche und da der erste Teil des Widgets Items vorhanden ist diesen extrahiere.

        Code:
        tmpsource = sh.return_item(trigger['source'])
        tmppfad = str(tmpsource)
        tmppfadende = tmppfad.find("AlexaRadio")
        tmppfad = tmppfad[0:tmppfadende+10]
        logger.info(tmppfad)​
        Dann habe ich in tmppfad z.B. "EG.Raum3.AlexaRadio".

        Jetzt muss ich das nur mit den anderen Items zusammenbekommen. Also so in der Art:

        "sh."+tmppfad+".Geraet()"

        ergibt dann:
        sh.EG.Raum3.AlexaRadio.Geraet()

        Aber das funktioniert ja mit einem str nicht. Und da hapert es gerade....

        Grüße, Marc


        Kommentar


          #19
          Zur Logik:
          basic.trigger kann eine Logik triggern und ihr einen Wert mitgeben. Daraus lässt sich der item-Pfad generieren. Im Beispiel kann ich der Logik die Raumbezeichnung übermitteln und das dortige Deckenlicht ausschalten.
          Code:
          {{ basic.trigger('', 'versuch', '', '', 'eg.eingang') }}
          Code:
          #!/usr/bin/env python3
          # versuch.py
          parameter = trigger['value']
          myitem = items.return_item(parameter+".licht.decke")
          myitem(0)​
          myitem ist in diesem Fall das gesamte item-Objekt. Man muss also nicht mehr über sh.<itempfad>() gehen, sondern kann das item direkt ansprechen.

          Gruß
          Wolfram
          Zuletzt geändert von wvhn; 21.04.2024, 17:23.

          Kommentar


            #20
            Ok, das hilft mir weiter!
            Vielen Dank Wolfram.

            Ich muss aber über das Parsen des Items gehen, da ich als Value schon andere Werte übergebe. Wie zum Beispiel welche Favoriten Button gespeichert werden soll (1-5).
            Ich kann das dafür ja aber auch nehmen.
            Ich werde morgen mal die Logik umbauen und berichten ob das so geklappt hat.

            Grüße und Danke noch mal, Marc

            Kommentar


              #21
              Das Thema der Controlgroup hat sich auch geklärt. Wenn Du die basic.print Aufrufe hinter das </span> der Controlgroup setzt, dann stimmt die Anzeige. Das könnte ein Bug in Safari sein, denn ich habe es auch auf einem Mac nachstellen können. Wahrscheinlich bleibt der Platz für die basic.prints irgendwie reserviert und dann reicht die Breite für 10 Elemente nicht mehr.

              Gruß
              Wolfram

              Kommentar


                #22
                Ok, setze ich so um.
                Vielen Dank!

                Grüße, Marc

                Kommentar


                  #23
                  wvhn Moin Wolfram,
                  bei genauerem hinsehen, würde sich der basic.trigger schon besser eignen.

                  Was mir da aber fehlt, ist das Icon in einer anderen Farbe darzustellen.
                  Und was noch ganz toll wäre, wenn der Knopf beim Drücken eine eingestellte Zeit blinken könnte.

                  Wäre es möglich, die Option ‚Color‘ und ‚Blink:5‘ mit einzubauen?

                  Was hälst Du davon, die Option ‚Source‘ auch noch mit als Option zu senden? Ich weiß nicht ob man das allgemein noch mal benötigt. Mir würde es bei der Übersichtlichkeit etwas hälfen. Aber wird das auch von anderen genutzt?

                  Man kann ja die gesendeten Value Werte so unterschiedlich machen, das man Sie in der Logik wieder erkennen kann. Wenn man aber den Source-Trigger dazu nimmt, wäre es übersichtlicher.

                  Grüße, Marc
                  Zuletzt geändert von schuma; 22.04.2024, 13:46.

                  Kommentar


                    #24
                    Moin Wolfram wvhn.
                    Das mit der Logik hat so geklappt wie erwartet.
                    Damit ist die Logik nun unabhängig von den Items die in der Logik benutzt werden.
                    Lediglich in der logic.yaml müssen die entsprechenden Items angelegt werden.
                    Die könnte ich noch eliminieren mit dem basic.trigger. Aber das ist das schon Kür ;-)
                    Wieder eine Herausforderung weniger!

                    Grüße, Marc

                    Kommentar


                      #25
                      schuma Moin Marc,

                      super, dass das geklappt hat. Für basic.trigger kann ich die Color-Option schnell nachrüsten und auch das Blinken sollte kein großer Aufwand sein. Leider geht „source“ aber nicht so einfach, da das Websocket-Protokoll von shNG dies nicht vorsieht. Man könnte die Info stattdessen in „value“ mit unterbringen und dann in der Logik parsen, zum Beispiel mit Doppelpunkt getrennl: „mySoure:myValue“.

                      Gruß
                      Wolfram

                      Kommentar


                        #26
                        Hallo Wolfram, das ist doch super.
                        Die Color und Blink Funktion kann man bestimmt öfter noch gebrauchen.

                        apropos, kann es sein, das beim Stateswitch das blinken nur funktioniert, wenn es bool item ist?
                        Ich wollte das blinken dazu nutzen, wenn man den Sender umschaltet dauert es etwas bis sich was tut ( Alexa Seitig) in der Zeit wollte ich den Button blinken lassen. Mit einem Num item klappt das aber nicht.

                        Das mit dem Value parsen wäre dann auch so meine Notlösung gewesen, habe es jetzt aber auch schon bei mir anders gelöst.

                        Alles in Allem, bin ich jetzt auch soweit mit dem Radio durch. Vielleicht noch ein paar Optimierungen und eine kleine Doku schreiben und dann stelle ich das Ganze in den Beitrag zum Plugin von AndreK.

                        Mal gucken….

                        Kommentar


                          #27
                          Die color und indicator-Optionen für basic.trigger sind jetzt im develop branch. Für beide kann man Farben und icon-Klassen angeben und für den indicator zusätzlich 'blink'. Beim indicator kann man dazu eine Zeit für den Timeout in Sekunden angeben - also vergleichbar zu basic.stateswitch nur ohne die zusätzlichen icons und die Simulation.

                          Da shNG das Triggern einer Logik nicht per Websocket zurückmeldet, läuft der indicator immer bis zum timeout - anders als bei basic.stateswitch und basic.select, wo der indicator vom item update gestoppt wird.​
                          Zitat von schuma Beitrag anzeigen
                          apropos, kann es sein, das beim Stateswitch das blinken nur funktioniert, wenn es bool item ist?
                          Ich wollte das blinken dazu nutzen, wenn man den Sender umschaltet dauert es etwas bis sich was tut ( Alexa Seitig) in der Zeit wollte ich den Button blinken lassen. Mit einem Num item klappt das aber nicht.
                          smartVISU unterscheidet beim indictor nicht nach item-Typen. Ich vermute das Verhalten liegt an der Rückmeldung durch shNG. In der Regel schickt shNG sofort eine Quittierung des erhaltenen Kommandos, ohne eine tatsächliche Umsetzung abzuwarten. Dann sieht man den indicator nicht in Aktion. Die Antwort müsstest Du in der Entwicklerkonsole sehen können. Für eine "echte" Rückmeldung habe ich in smartVISU das "kombinierte Schalt- und Statusitem" eingeführt. Damit startet der indicator beim Schalten in der Visu und wird erst gestoppt, wenn das Statusitem empfangen wird (also i.d.R. bei Rückmeldung des Aktors).

                          Gruß
                          Wolfram

                          Kommentar


                            #28
                            Moin Wolfram, danke für das umsetzen in dem basic.trigger!

                            Ich habe das mit dem Blink gerade noch mal in dem basic.stateswitch probiert. Da komme ich noch nicht auf einen grünen Zweig…

                            Ich habe ja ein num Item zum schalten und sende damit die Zahl 101. Die Logik wird mit dem Item getriggert und 101 ausgewertet.

                            Ich würde hier ja niemals eine Rückmeldung erhalten.
                            Ich habe es nun schon mit einem DummyItem versucht, damit auf dessen Status gewartet wird, der ja nie kommt und damit gegen timeout läuft.
                            Das passt aber irgendwie nicht in meine Widget Konfiguration. Er kennt die Items getrennt durch den Doppelpunkt irgendwie nicht.

                            Code:
                            {{ basic.stateswitch('AStation1',item_alexa~'.AlexaRadio.StatusDummy':item_alexa~'.AlexaRadio.Station', '', 1, 'https://cdn-radiotime-logos.tunein.com/s255597g.png', '', '', 'blink:4', '#popupsetup1') }}
                            Was ich umsetzen möchte ist aber, dass nachdem drücken der Button 4 Sekunden lang blinkt.

                            Grüße und Danke nochmals,
                            Marc
                            Zuletzt geändert von schuma; 24.04.2024, 13:58.

                            Kommentar


                              #29
                              Moin Marc,

                              der Doppelpunkt muss innerhalb der Anführungszeichen stehen.
                              Code:
                              {{ basic.stateswitch('AStation1',item_alexa~'.AlexaRadio.StatusDummy:'~item_alexa~'.AlexaRadio.Station', '', 1, 'https://cdn-radiotime-logos.tunein.com/s255597g.png', '', '', 'blink:4', '#popupsetup1') }}
                              sollte passen.

                              Gruß
                              Wolfram

                              Kommentar


                                #30
                                Hallo Wolfram, das klappt auch nicht:

                                Code:
                                error: [B]Arguments must be separated by a comma. Unexpected token "name" of value "item_alexa" ("punctuation" expected with value ",").[/B]​
                                Grüße, Marc

                                Kommentar

                                Lädt...
                                X