New FHEM Tablet UI

Begonnen von setstate, 22 Februar 2015, 23:37:24

Vorheriges Thema - Nächstes Thema

viegener

Zitat von: wolfram am 29 Juni 2015, 11:51:32
Wenn der Input-Kanal meines Verstärkers "Tuner" ist, möchte ich gern über die "Skip"-buttons den Radiosender wechseln.
Wenn der Input-Kanal meines Verstärkers "mPlay" ist, möchte ich über die "Skip"-Buttons den iTunes-Song wechseln.
Wenn der Input-Kanal meines Verstärkers "SAT/Cabel" ist, möchte ich über die "Skip"-Buttons den Fernsehsender wechseln.


Eine Möglichkeit dafür wäre mit FHEM-Mitteln eine Kombination aus Notify (oder DOIF) und Trigger.

Also für die jeweilige Funktion (z.B. Skip) ein einzelnes notify anlegen, bei dem im Commandteil der Status des Input-Kanal ausgewertet wird und dann per If der entsprechende Befehl an den richtigen Device gesendet wird. Das kann man prinzipiell auch über DOIF machen, allerdings finde ich das umständlicher, weil mehr verschiedene Ausdrücke beteiligt sind.

Der Trigger Befehl wird dann im tablet ui hinter den Button gelegt, in dem man data-cmd und data-set entsprechend mit dem trigger-daten belegt

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

wolfram

Hallo  viegener,

zuerst einmal danke für die schnelle Antwort. Ich dachte mir schon, dass ich in fhem-native anfangen muss.
Könntest Du mir mit dem notify und dem Skip vielleicht noch unter die Arme greifen? Ich bin leider nicht so der Pro und glaube, dass ich das aus eigener Kraft nicht ganz hinbekomme - ein beispielhafter Ansatz reicht mir.

Den Input meines Verstärkers kann ich abfragen mit: "get marantz input" - das Ergebnis ist dann z.B. "SAT/CBL"

Wie bekomme ich jetzt diese Daten in ein notify, und dann wiederum in einen "skip"-Befehl?

vielen Dank und LG
wolf

viegener

Ich versuche es mal als Trockenübung, da ich momentan nicht zuhause und damit ohne Zugriff auf mein fhem bin. Also bitte mit Vorsicht geniessen, da ich weder perl noch fhem Korrektheit prüfen konnte:

Also in fhem müsste ein Device (Typ notify) angelegt werden, dass für den jeweiligen Befehl (z.B. skip) den richtigen Befehl an das richtige Zielgerät abschickt. Das müsste ungefähr so aussehen:


define groupSkip notify groupSkip {
my $groupSkip _input = ReadingsVal( "marantz", "input", "" );
if ( $groupSkip _input eq "Tuner" ) {
fhem( 'set ...' );
} elsif ( $groupSkip _input eq "SAT/CBL" ) {
fhem( 'set ...' );
} elsif ( $groupSkip _input eq "mPlay" ) {
fhem( 'set ...' );
}
}


Bei 'set ...' ist jeweils der richtige fhem Befehl für den Deivce einzutragen.

Am besten probierst Du das dann innerhalb von fhem aus in dem Du als Kommando in fhemweb "trigger groupSkip" einträgst und dann mal im Log/eventviewer schaust was passiert.
Analog ist ein eigener Notify für alle anderen Kommandos anzulegen (z.B. groupPlay), der natürlich anders heissen muss und andere set-Kommandos beinhaltet. Ansonsten aber analog aufgebaut ist.

Wenn das geht, kannd im tablet ui ein Push angelegt werden, der den Trigger-befehl aufruft, diese sollte wohl folgende Parameter haben:


data-device="groupSkip"
data-cmd="trigger"
data-set=""


Und jetzt bitte korrigiert mich wenn das so nicht funktioniert oder etwaige Fehler enthält,
Johannes
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

wolfram

Danke, johannes fürs Brücke bauen - ich werde es heute Abend mal versuchen und Rückmeldung geben.

LG
wolf

setstate

Zitat von: setstate am 28 Juni 2015, 18:45:20
ich habs auf

dialog.css({
     top: ($(window).height() / 2 - dialog.outerHeight()) / 2,
     left: ($(window).width() / 2 - dialog.outerWidth()) / 2
    });


geändert. Passt doch universeller, oder?

Peinlich, die Klammer ist noch falsch gewesen ...

Zitat
-                    top: ($(window).height() / 2 - dialog.outerHeight()) / 2,
-                    left: ($(window).width() / 2 - dialog.outerWidth()) / 2
+                    top: ($(window).height() / 2 - dialog.outerHeight() / 2),
+                    left: ($(window).width() / 2 - dialog.outerWidth() / 2)

Update ist gemacht.
Plus: Schließen des Dialogs jetzt auch einfach beim Klick auf den Hintergrund.

wolfram

#2090
Hallo Johannes,

ich habe es so versucht wie Du beschrieben hast:

Zitat von: viegener am 29 Juni 2015, 14:39:29


define groupSkip notify groupSkip {
my $groupSkip _input = ReadingsVal( "marantz", "input", "" );
if ( $groupSkip _input eq "Tuner" ) {
fhem( 'set ...' );
} elsif ( $groupSkip _input eq "SAT/CBL" ) {
fhem( 'set ...' );
} elsif ( $groupSkip _input eq "mPlay" ) {
fhem( 'set ...' );
}
}


Und jetzt bitte korrigiert mich wenn das so nicht funktioniert oder etwaige Fehler enthält,
Johannes


define groupSkip notify groupSkip {
my $groupSkip _input = ReadingsVal( "Marantz", "input", "" );
if ( $groupSkip _input eq "MPLAY" ) {
fhem( 'set minime next' );
} elsif ( $groupSkip _input eq "SAT/CBL" ) {
fhem( 'set VuPlus channelDown' );
} elsif ( $groupSkip _input eq "tuner" ) {
fhem( 'set tuner next' );
}
}


Leider bekomme ich aber folgende Fehlermeldung - da ich aber nicht so der Coder bin (irgendwo fehlt bestimmt ne Klammer o.ä.) frage ich nochmal um Hilfe.

Danke wolf

und hier die Fehlermeldung:

Unknown command my, try help. Unknown command if, try help. Unknown command fhem(, try help. Unknown command }, try help. Unknown command fhem(, try help. Unknown command }, try help. Unknown command fhem(, try help. Unknown command }, try help. Unknown command }, try help.

viegener

#2091
Ja, das kann so nicht gehen, hier ist mal ein verbesserter Vorschlag, bei dem meine Fehler bei den Leerzeichen und den Semikolons beseitigt sind (Zeichensetzung war noch nie meine Stärke). Deine Befehle habe ich mitübernommen:


define groupSkip notify groupSkip {
my $groupSkip_input = ReadingsVal( "Marantz", "input", "" );;
if ( $groupSkip_input eq "MPLAY" ) {
fhem( 'set minime next' );;
} elsif ( $groupSkip_input eq "SAT/CBL" ) {
fhem( 'set VuPlus channelDown' );; 
} elsif ( $groupSkip_input eq "tuner" ) {
fhem( 'set tuner next' );;
}
}


Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

wolfram

Guten Morgen Johannes,

mit
define groupSkip notify groupSkip {
my $groupSkip_input = ReadingsVal( "Marantz", "input", "" );;
if ( $groupSkip_input eq "MPLAY" ) {
fhem( 'set minime next' );;
} elsif ( $groupSkip_input eq "SAT/CBL" ) {
fhem( 'set VuPlus channelDown' );; 
} elsif ( $groupSkip_input eq "tuner" ) {
fhem( 'set tuner next' );;
}
}


bekomme ich leider auch wieder nur:

Unknown command my, try help. Unknown command if, try help. Unknown command fhem(, try help. Unknown command }, try help. Unknown command fhem(, try help. Unknown command }, try help. Unknown command fhem(, try help. Unknown command }, try help. Unknown command }, try help.

für mich sieht die Fehlermeldung genauso aus....scheinbar stösst sich fhem schon an dem "my" in der 2. Zeile.

Viele Grüße und einen sonnigen Tag
wolf

fhemler

Wenn du das so in die fhem.cfg eingetragen hast, dann muss hinter jede Zeile ein "\"...

wolfram

Danke fhemler,
Werde es leider erst heut Abend testen können und dann Rückmeldung geben.


Gesendet von iPhone mit Tapatalk

viegener

Ja fhemler hat recht, Danke!

Das Codebeispiel war für Copy und Paste in fhemweb's-Kommandofeld gedacht, dann wird es automatisch in eine Zeile zusammengefasst. Bei Eingabe in fhem.cfg muss am Ende jeweils der \ stehen, damit beim Einlesen klar ist, dass das Kommando noch weitergeht. Ansonsten wird die nächste Zeile als getrenntes FHEM.cfg aufgefasst und dort gibt es kein my, denn das ist ja eigentlich Teil des Perl-Ausdrucks in den geschweiften Klammern.

Johannes

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

wolfram

Asche auf mein Haupt, hätte ich eigentlich wissen müssen - wie gesagt ich probier es einfach heute Abend noch einmal.

Danke vielmals.
wolf

lapidu

Hallo,

ich habe erhebliche Probleme das Tablet UI im Browser anzuzeigen. ( Verwende Firefox, beim Chrome habe ich das selbe Problem)

Wenn ich die Seite aufrufe kommt folgendes:

(http://up.picr.de/22400416vt.jpg)

nach mehrmaligen Refresh der Seite und Löschung des Caches passt es dann

(http://up.picr.de/22400417vf.jpg)

Hat jemand einen Tipp?

Vielen Dank.

Lapidu

Nobby1805

poste mal deinen index-file
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

lapidu

Zitat<!DOCTYPE html>
<html>
<head>
   <!--
    /* FHEM tablet ui */
    /*
    * Just another dashboard for FHEM
    *
         * Version: 1.3.5
    * Requires: jQuery v1.7+, font-awesome, jquery.gridster, jquery.toast
    * URL: https://github.com/knowthelist/fhem-tablet-ui
    *
    * Copyright (c) 2015 Mario Stephan <mstephan@shared-files.de>
    * Under MIT License (http://www.opensource.org/licenses/mit-license.php)
    *
    * - create a new folder named 'tablet' in /<fhem-path>/www
    * - copy all files incl. sub folders into /<fhem-path>/www/tablet
    * - add 'define tablet_ui HTTPSRV tablet ./www/tablet Tablet Frontend' in fhem.cfg
    * - Tadaaa! A new fhem ui in http://<fhem-url>:8083/fhem/tablet/
    */
   -->
   <title>FHEM-Tablet-UI</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="116">
   <meta name="widget_base_height" content="131">
   <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="debug" content="0"> <!-- 1=output to console;0=not output -->
   
   <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/powerange.min.css" />

        <!-- define your personal style here, it wont be overwritten  -->
        <link rel="stylesheet" href="/fhem/tablet/css/fhem-tablet-ui-user.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>
   
   <!-- Enable this lines for usage with WebViewControl --><!--
   <script type="text/javascript" src="/fhem/pgm2/cordova-2.3.0.js"></script>
   <script type="text/javascript" src="/fhem/js/webviewcontrol.js"></script>
   <script type="text/javascript">var wvcDevices = {'12345': 'Tablet'}; var wvcUserCssFile="webviewcontrol.css"</script>
   --><!-- End for WebViewControl -->

</head>
<body>

<!-- available class: container,left,right,cell,narrow,darker,big,bigger,small,thin,large,wider -->
<!-- available data-type: symbol,dimmer,homestatus,label,push,slider,switch,thermostat,volume,weather -->
<frameset>


<div class="gridster">
<ul>
<li data-row="1" data-col="1" data-sizex="1" data-sizey="2">
        <header>Wohnung Bad</header>
       <div data-type="thermostat"
     data-device="Heizung.1OG.rechts.Bad"
     data-get="desired-temp"
     data-temp="measured-temp"
    data-min="4"
    data-off="off"
     class="cell">
</div>
<div data-type="label"
           data-device="Heizung.1OG.rechts.Bad"
           data-get="measured-temp"
           data-limits='[-73,19,23]'
           data-colors='["#6699FF","#AA6900","#FF0000"]'
           data-unit="%B0C%0A"
           class="cell inline big">
</div>
</li>
<li data-row="1" data-col="2" data-sizex="1" data-sizey="2">
        <header>Wohnung Kinder</header>
       <div data-type="thermostat"
     data-device="Heizung.1OG.rechts.Kinder"
     data-get="desired-temp"
     data-temp="measured-temp"
    data-min="4"
    data-off="off"
     class="cell">
</div>
<div data-type="label"
           data-device="Heizung.1OG.rechts.Kinder"
           data-get="measured-temp"
           data-limits='[-73,19,23]'
           data-colors='["#6699FF","#AA6900","#FF0000"]'
           data-unit="%B0C%0A"
           class="cell inline big">
</div>
</li>
<li data-row="1" data-col="3" data-sizex="1" data-sizey="2">
        <header>Wohnung Schlaf</header>
       <div data-type="thermostat"
     data-device="Heizung.1OG.rechts.Schlaf"
     data-get="desired-temp"
     data-temp="measured-temp"
    data-min="4"
    data-off="off"
     class="cell">
</div>
<div data-type="label"
           data-device="Heizung.EG.Bad"
           data-get="measured-temp"
           data-limits='[-73,19,23]'
           data-colors='["#6699FF","#AA6900","#FF0000"]'
           data-unit="%B0C%0A"
           class="cell inline big">
</div>
</li>
</ul>
</div>
</body>
</html>