Hallo Zusammen,
ich kämpfe nun schon ewig mit dem Switch-Widget und möchte gerne die regulären Ausdrücke dort verwenden wie sie auch im Beispiel angegeben sind. Leider funktionieren diese bei mir jedoch nicht.
Wenn mein Sonos System den Song abspielt, ist der Status "PLAYING". Sofern ich ihn pausiere, kann der Status aber "STOPPED" oder "PAUSED_PLAYBACK" sein. Daher wollte ich hier mit REGEX arbeiten.
Anbei mein Code.
<div data-type="switch" class="left"
data-device="Sonos_Wohnzimmer"
data-icons='["fa-pause", "fa-play"]'
data-states='["PLAYING", "STOPPED"]'
data-on-background-color="#505050"
data-off-background-color="#505050"
data-get="transportState"
data-get-on="PLAYING"
data-get-off="!PLAYING"
data-set-on="Play"
data-set-off="Pause">
</div>
Muss ich die regulären Ausdrücke vorher noch irgendwo aktivieren?
Vielen Dank!
Thomas
Zitat von: ToM_ToM am 29 Januar 2016, 17:55:33
Hallo Zusammen,
ich kämpfe nun schon ewig mit dem Switch-Widget und möchte gerne die regulären Ausdrücke dort verwenden wie sie auch im Beispiel angegeben sind. Leider funktionieren diese bei mir jedoch nicht.
Wenn mein Sonos System den Song abspielt, ist der Status "PLAYING". Sofern ich ihn pausiere, kann der Status aber "STOPPED" oder "PAUSED_PLAYBACK" sein. Daher wollte ich hier mit REGEX arbeiten.
Anbei mein Code.
<div data-type="switch" class="left"
data-device="Sonos_Wohnzimmer"
data-icons='["fa-pause", "fa-play"]'
data-states='["PLAYING", "STOPPED"]'
data-on-background-color="#505050"
data-off-background-color="#505050"
data-get="transportState"
data-get-on="PLAYING"
data-get-off="!PLAYING"
data-set-on="Play"
data-set-off="Pause">
</div>
Muss ich die regulären Ausdrücke vorher noch irgendwo aktivieren?
Vielen Dank!
Thomas
Moin.
Wenn du data-states verwendest brauchst du data-get-on und data-get-off nicht!!!!
Versuch mal: Such nach: State 1: PLAYINGirgendwas und nach: State 2: VomAnfangALLESANDEREAUßERPLAYINGirgendwas
<div data-type="switch" class="left"
data-device="Sonos_Wohnzimmer"
data-icons='["fa-pause", "fa-play"]'
data-states='["PLAYING.*", "^(?!PLAYING.*)"]'
data-on-background-color="#505050"
data-off-background-color="#505050"
data-get="transportState"
data-set-on="Play"
data-set-off="Pause">
</div>
oder: sucht nach State 1: PLAYING und nach State 2: STOPPED oder PAUSED_PLAYBACK
<div data-type="switch" class="left"
data-device="Sonos_Wohnzimmer"
data-icons='["fa-pause", "fa-play"]'
data-states='["PLAYING.*", "(STOPPED)|(PAUSED_PLAYBACK)"]'
data-on-background-color="#505050"
data-off-background-color="#505050"
data-get="transportState"
data-set-on="Play"
data-set-off="Pause">
</div>
Bin kein RegEx Profi... da gibt es garantiert elegantere Lösungen und getestet hab ich das jetzt auch nicht. Aber so ähnlich verwende ich das bei mir.
Viel Erfolg weiter.
Grüße^^
Hey vielen Dank für die Antwort.
Beide Varianten hatte ich auch schon ausprobiert und sie funktionieren bei mir nicht. Also allgemein scheint der die regulären Ausdrücke nicht zu verarbeiten.
Hast du noch irgendwas zusätzlich installiert?
Bei mir ändert sich das Icon nicht bzw. zeigt mir das Standard Icon (Glühbirne).
VG, Thomas.
Es müsste so funktionieren, wie von Roman1528 vorgeschlagen.
Ist das wirklich das richtige Reading? Was sagt 'list Sonos_Wohnzimmer transportState" ?
Ja, es ist das richtige Reading.
Wenn ich direkt die 2 Werte "PLAYING" und "STOPPED" verwende, geht es ja korrekt.
Nur mit den REGEX leider nicht.
list Sonos_Wohnzimmer transportState liefert die Werte:
Sonos_Wohnzimmer 2016-01-30 21:06:20 STOPPED
und wenn Musik läuft:
Sonos_Wohnzimmer 2016-01-31 02:57:12 PLAYING
Kann es vielleicht daran liegen dass ich WebViewControl verwende und das vielleicht Probleme macht?
neee, müsste auch so gehen. WVC nutzt die Standard JS-Engine des OS.
Schicke noch mal deinen aktuellen HTML Teil für den Switch. Ich versuche das bei mir dann nochmal mit Dummies zu simulieren.
Ich kann mich hier anschließen, bei mir funktioniert es leider auch nicht:
<div data-type="switch" class="inline"
data-device="RaspberryPi"
data-icons='["fa-pause", "fa-play"]'
data-states='["playing.*", "(stopped)|(paused)"]'
data-on-background-color="#505050"
data-off-background-color="#505050"
data-get="playStatus"
data-set-on="play"
data-set-off="pause">
</div>
<title>HOME</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="widget_base_width" content="152">
<meta name="widget_base_height" content="155">
<meta name="widget_margin" content="1">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="longpoll" content="1"> <!-- 1=longpoll;0=shortpoll every 30sec -->
<meta name="gridster_disable" content="1">
<meta name="debug" content="0"> <!-- 1=output to console;0=no output -->
<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>
<link rel="stylesheet" href="/fhem/tablet/lib/jquery.gridster.min.css" />
<link rel="stylesheet" href="/fhem/tablet/css/fhem-tablet-ui.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/font-awesome.min.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/jquery.toast.min.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/fhemSVG.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/openautomation.css" />
<link rel="stylesheet" href="/fhem/tablet/css/fhem-tablet-ui-user_tablet.css" />
<script type="text/javascript" src="/fhem/pgm2/jquery.min.js"></script>
<script type="text/javascript" src="/fhem/tablet/lib/jquery.knob.mod.min.js"></script>
<script type="text/javascript" src="/fhem/tablet/lib/jquery.toast.min.js"></script>
<script type="text/javascript" src="/fhem/tablet/lib/jquery.circlemenu.js"></script>
<script type="text/javascript" src="/fhem/tablet/lib/powerange.min.js"></script>
<script type="text/javascript" src="/fhem/tablet/lib/jquery.gridster.min.js"></script>
<script type="text/javascript" src="/fhem/tablet/lib/fa-multi-button.min.js"></script>
<script type="text/javascript" src="/fhem/tablet/js/fhem-tablet-ui.js"></script>
<script type="text/javascript" src="/fhem/pgm2/cordova-2.3.0.js"></script>
<script type="text/javascript" src="/fhem/pgm2/webviewcontrol.js"></script>
<script type="text/javascript">var wvcDevices = {'TAB3':'TAB3'}; var wvcUserCssFile="webviewcontrol.css"</script>
Schalten funktioniert, aber das Icon wird nicht aktualisiert, nur beim reload der Seite
Bei mir hat sich das Problem gelöst, in dem ich im SB_Player do_not_notify false und event-on-change-reading .* gesetzt habe.
EDIT: Es geht teilweise und geht dann wieder nicht. Es ging jetzt kurze Zeit wieder nicht und dann auf einmal geht es wieder. Erklären warum kann ich aber leider nicht. Wenn ich die Seite neu lade geht es erstmal wieder nicht, dauert dann circa 30s und funktioniert wieder. longpoll ist aktiviert.
1.) Mit WVC startet longpoll erst nach 30 Sekunden. Mit debug=1 sieht man eine toast Message, die das sagt und man sieht auch, ab wann longpoll aktiv ist. Wenn es schneller starten soll, muss man das angeben: <meta name="longpoll_delay" content="1000">
2.) Die Header Definition ist ungünstig und führt bei mir zu sporadischen "Nichtladen" der Seite, wie es hier schon dutzende Problemmeldungen gibt. So sollte der Header aussehen:
<title>HOME</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="widget_base_width" content="152">
<meta name="widget_base_height" content="155">
<meta name="widget_margin" content="1">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="longpoll" content="1"> <!-- 1=longpoll;0=shortpoll every 30sec -->
<meta name="gridster_disable" content="1">
<meta name="debug" content="1"> <!-- 1=output to console;0=no output -->
<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>
<link rel="stylesheet" href="/fhem/tablet/lib/jquery.gridster.min.css" />
<link rel="stylesheet" href="/fhem/tablet/css/fhem-tablet-ui.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/font-awesome.min.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/jquery.toast.min.css" />
<!-- define your personal style here, it wont be overwritten -->
<!-- link rel="stylesheet" href="/fhem/tablet/css/fhem-green-ui.css" / -->
<link rel="stylesheet" href="/fhem/tablet/css/fhem-tablet-ui-user.css" />
<script src="/fhem/pgm2/jquery.min.js" defer></script>
<script src="/fhem/tablet/lib/jquery.toast.min.js" defer></script>
<script src="/fhem/tablet/lib/jquery.gridster.min.js" defer></script>
<script src="/fhem/tablet/js/fhem-tablet-ui.js" defer></script>
<script type="text/javascript" src="/fhem/pgm2/cordova-2.3.0.js"></script>
<script type="text/javascript" src="/fhem/pgm2/webviewcontrol.js"></script>
<script type="text/javascript">var wvcDevices = {'TAB3':'TAB3'}; var wvcUserCssFile="webviewcontrol.css"</script>
</head>
bzw.: wenn die href="/fhem/tablet/css/fhem-tablet-ui-user_tablet.css" nicht existiert, kommt es auch zu Seitenladefehler
3.) RegEx passen soweit
Hey sorry für die später Antwort.
Das ist mein Code für das Widget.
<div data-type="switch" class="left"
data-device="Sonos_Wohnzimmer"
data-icons='["fa-pause", "fa-play"]'
data-states='["PLAYING", "^(?!PLAYING)"]'
data-on-background-color="#505050"
data-off-background-color="#505050"
data-get="transportState"
data-set-on="Play"
data-set-off="Pause">
</div>
Auch der funktioniert nicht:
<div data-type="switch" class="left"
data-device="Sonos_Wohnzimmer"
data-icons='["fa-pause", "fa-play"]'
data-states='["PLAYING.*", "^(?!PLAYING.*)"]'
data-on-background-color="#505050"
data-off-background-color="#505050"
data-get="transportState"
data-set-on="Play"
data-set-off="Pause">
</div>
Zu Beginn habe ich diese Lampe als Icon. Sobald ich dann z.B. ein Webradio starte, ändert sich das Icon korrekterweise ins Pause-Icon. Sobald ich das Radio aber stoppe und es somit nicht mehr den transportState "PLAYING" sondern "STOPPED" oder "PAUSE..." hat, ändert sich das Icon nicht und es wird weiterhin das Pause-Icon angezeigt.
VG, Thomas.
Moin,
hattest du das Problem in der Zwischenzeit lösen können?
Ich habe das gleiche Problem... schalten lässt sich alles aber "get-off" wird nicht erkannt.
Ich wollte "switch" nutzen um Lightscenes zu steuern was an sich auch wunderbar klappt, nur erkennt TabletUI eben nicht den "off" Status. (bzw. den Wechsel in eine andere Scene).
Wenn ich die gleiche Config für einen Dummy verwende funktioniert das ganze komischerweise einwandfrei.
Bei Lightscene jedoch nicht... :(
event-on-change und event-on-update ist alles ausprobiert bei der Lightscene, ohne Erfolg.
Jemand eine Idee?
Hier mal der Code eines Buttons:
<div>
<div data-type="switch" data-device="Lightscene_Home"
data-set="scene"
data-get-on="Absent" data-get-off="!Absent"
data-set-off=""
data-set-on="Absent" class="green"
data-icon="oa-status_away_1" data-background-icon="fa-square" ></div>
<div data-type="label" class="inline w1x large thin">Absent</div>
</div>
grtz
CmdA
data-get-off="!Absent" funktioniert nicht.
entweder mit Key-Word "!on" -> bedeutet: alles nur nicht das was unter data-get-on steht
data-get-off="!on"
oder als RegEx -> bedeutet: alles nur nicht "Absent"
data-get-off="(?!Absent).*"
Argh!
Es kann so einfach sein...
Da hatte ich wohl ein ganz großes Brett vorm Kopf :(
Es funktioniert.
1000 Dank!!
grtz
CmdA