Hallo,
ich versuche mit notify kanäle durchzutoggeln, klappt aber noch nicht.
zu Fuß kann ich mit
set Onkyo internet-radio-preset 1
den Kanal 1 anwählen.
Ziel ist die 6 Kanäle 1 - 6 per notify auf Taste durchzutoggeln.
So funktioniert es leider nicht:
define number dummy
attr number setList state: 1, 2, 3, 4, 5, 6
define Button8_Onkyo_stage notify (Remote8_._Btn_08:Short.*) { fhem("set Onkyo internet-radio-preset.number;;set number (number)+1")}
Wie kann ich den Text Onkyo internet-radio-preset mit einer nummer 1 - 6 zusammensetzen?
Wie kann ich die Variable number hochzählen und nach 6 bei hochzählen wieder auf 1 setzen?
VG, Ronald
Wozu den dummy?
Der notify triggert wie du willst!?
Rufe mit dem notify eine sub auf:
define myNotify notify RegEx {SetzeLautstaerke()}
und dort einfach:
sub SetzeLautstaerke()
{
my $NextLs=ReadingsNum("Onkyo", "internet-radio-preset", 0);
$NextLs += 1;
if($NextLs > 6)
{
$NextLs =0;
}
{fhem ("set Onkyo internet-radio-preset $NextLs")}
}
https://wiki.fhem.de/wiki/99_myUtils_anlegen
Sicher auch ohne sub direkt im notify möglich...
...aber so kann man leicht Logausgaben etc. machen und weitere Abhängigkeiten/Abfragen etc. programmieren ohne, dass es schnell unübersichtlich wird (meine Meinung)...
Namen etc. nur Beispiele und die passende Regex für den notify musst du halt übernehmen/passend definieren...
Ungetestet und mit Handytastatur zusammengeklimpert...
Gruß, Joachim
Hallo Joachim,
danke für die schnelle Antwort.
Leider bin ich in punkto FHEm noch nicht so sicher.
Wenn ich deinen Code in der fhem.cfg einsetze
define Kanal notify RegEx {SetzeLautstaerke()}
sub SetzeLautstaerke() {my $NextLs=ReadingsNum("Onkyo", "internet-radio-preset", 0);$NextLs += 1;if($NextLs > 6) {$NextLs =0;}{fhem ("set Onkyo internet-radio-preset $NextLs")}}
bekomme ich nach shutdown restart folgendes Ergebnis:
- Messages collected while initializing FHEM:
configfile: Unknown command sub, try help.
Unknown command $NextLs, try help.
Unknown command if($NextLs, try help.
Unknown command }{fhem, try help.
Muss ich die Sub definieren?
Im logfile sieht das so aus:
- 2017.02.27 22:52:26 1: configfile: Unknown command sub, try help.
Unknown command $NextLs, try help.
Unknown command if($NextLs, try help.
Unknown command }{fhem, try help.
Gruß, Ronald
wie MadMax-FHEM schon schrieb....
Das notify ruft eine Routine SetzeLautstaerke auf, welche in eine Datei ausgelagert wurde... und zwar z.B. in die 99_myUtils.pm
Dort kommt der Code von SetzeLautstaerke rein.
Schau bitte ins Wiki zu 99_myUtils.pm
Den Link hat Dir MadMax-FHEM schon gepostet..
Den Link hast du dir mal angeschaut??
Kann nicht sein!
EDIT: Ah, da ist mir schnell jemand zur Seite gesprungen ;)
Warum hauen viele einfach unbesehen/ungelesen/ungeprüft alles einfach in die Config (und per Hand editieren sollte man GAR NICHT da es NICHT nötig ist und wenn dann erst, wenn man GANZ GENAU WEIß WAS MAN TUT)...
...oder in das WebCmd-Fenster?? ;)
Und mal in der Commandref bzgl. notify kucken kann man auch als noch nicht so sicherer fhem-Anwender mal tun...
...und nachdem du hier ja bereits ein notify präsentiert hast bin ich davon ausgegangen, dass du das bereits entsprechend passend gestaltet hast...
EDIT2: und also ungefähr weißt wie notify so funktioniert...
Also das notify einfach in die WebCmd eingeben, dazu muss das RegEx halt zu deinem Trigger/Event passen.
Wenn das was du bislang geliefert hast passt dann einfach so:
define Button8_Onkyo_stage notify (Remote8_._Btn_08:Short.*) {SetzeLautstaerke()}
wobei mich die Klammern um die RegEx beim notify stören und ich glaube, dass die nicht hingehören (mag aber auch so funktionieren)...
...ich denke also eher so:
define Button8_Onkyo_stage notify Remote8_._Btn_08:Short.* {SetzeLautstaerke()}
Dann Enter und dann das rote Fragezeichen links oben klicken: save config...
Aber das passende RegEx musst du schon selber bauen, ich weiß ja nicht auf was getriggert werden soll...
Aber es ist nicht so schwer:
EventMonitor öffnen, den Filter grob auf das einstellen was man sehen will und dann schauen was kommt, wenn man das Ereignis (Knopf drücken??) ausführt.
Und dann entweder hier posten oder halt die RegEx "basteln"...
In der Sub (da dann dem Link folgen, dort ist erläutert was das alles ist und soll) evtl. zu Beginn eine Logausgabe, dann weißt du auch, dass der notify triggert und die sub aufruft...
sub SetzeLautstaerke()
{
my $NextLs=ReadingsNum("Onkyo", "internet-radio-preset", 0);
$NextLs += 1;
Log(1,"SetzeLautstaerke nextLS: $NextLs");
if($NextLs > 6)
{
$NextLs =1;
}
{fhem ("set Onkyo internet-radio-preset $NextLs")}
}
EDIT3: $NextLs=0 geändert auf $NextLs = 1 da du ja von 1-6 (und nicht 0-6) durchtoggeln willst...
Gruß, Joachim
Hallo Joachim,
danke für die ausführliche Info.
Lesenden Menschen kann geholfen werden, in dem Link ist das mit 99_myUtils.pm ja prima erklärt. :-[
Habe Deinen Code eingetragen, lediglich SetzeLautstärke durch SetzeStage ersetzt.
In meiner 99_myUtils.pm steht jetzt:
sub SetzeStage()
{
my $NextLs=ReadingsNum("Onkyo", "internet-radio-preset", 0);
$NextLs += 1;
Log(1,"SetzeStage nextLS: $NextLs");
if($NextLs > 6)
{
$NextLs =1;
}
{fhem ("set Onkyo internet-radio-preset $NextLs")}
}
Als Webcmd habe ich eingegeben:
define Button8_Onkyo_stage notify Remote8_._Btn_08:Short.* {SetzeStage()}
Wenn ich Btn_8 auslöse sehe ich im Logfile immer zwei Zeilen:
- 2017.02.28 23:46:39 1: SetzeStage nextLS: 1
2017.02.28 23:46:39 3: ONKYO_AVR set Onkyo internet-radio-preset 1
2017.02.28 23:47:01 1: SetzeStage nextLS: 1
2017.02.28 23:47:01 3: ONKYO_AVR set Onkyo internet-radio-preset 1
Hier noch die Lists aus dem Eventmonitor, 2 x Btn_08 betätigt:
- 2017-02-28 23:58:40 CUL_HM Remote8_2 CMDs_done
2017-02-28 23:58:40 CUL_HM Remote8_2 Remote8_2_Btn_08 Short
2017-02-28 23:58:40 CUL_HM Remote8_2_Btn_08 Short (to HMUART)
2017-02-28 23:58:40 CUL_HM Remote8_2_Btn_08 trigDst_19A5F7: noConfig
2017-02-28 23:58:40 CUL_HM Remote8_2_Btn_08 trigger: Short_57
2017-02-28 23:58:40 CUL_HM Remote8_2_Btn_08 trigger_cnt: 57
2017-02-28 23:58:41 structure Wohnzimmer undefined
2017-02-28 23:58:41 ONKYO_AVR Onkyo screenLayerInfo:
2017-02-28 23:58:41 ONKYO_AVR Onkyo screenLayerInfo: 2
2017-02-28 23:58:41 ONKYO_AVR Onkyo screenListPos:
2017-02-28 23:58:41 ONKYO_AVR Onkyo screenListPos: 0000
2017-02-28 23:58:41 structure Wohnzimmer undefined
2017-02-28 23:58:41 ONKYO_AVR Onkyo playStatus: stopped
2017-02-28 23:58:41 ONKYO_AVR Onkyo stateAV: on
2017-02-28 23:58:41 ONKYO_AVR Onkyo currentTrackPosition: --:--
2017-02-28 23:58:42 structure Wohnzimmer undefined
2017-02-28 23:58:42 ONKYO_AVR Onkyo currentArtist: ---
2017-02-28 23:58:42 structure Wohnzimmer undefined
2017-02-28 23:58:42 ONKYO_AVR Onkyo currentAlbum: ---
2017-02-28 23:58:42 structure Wohnzimmer undefined
2017-02-28 23:58:42 ONKYO_AVR Onkyo currentAlbum:
2017-02-28 23:58:42 ONKYO_AVR Onkyo currentArtist:
2017-02-28 23:58:46 CUL_HM Remote8_2 battery: ok
2017-02-28 23:58:46 CUL_HM Remote8_2 CMDs_done
2017-02-28 23:58:46 CUL_HM Remote8_2 Remote8_2_Btn_08 Short
2017-02-28 23:58:46 CUL_HM Remote8_2_Btn_08 Short (to HMUART)
2017-02-28 23:58:46 CUL_HM Remote8_2_Btn_08 trigDst_19A5F7: noConfig
2017-02-28 23:58:46 CUL_HM Remote8_2_Btn_08 trigger: Short_58
2017-02-28 23:58:46 CUL_HM Remote8_2_Btn_08 trigger_cnt: 58
2017-02-28 23:58:47 structure Wohnzimmer undefined
2017-02-28 23:58:47 ONKYO_AVR Onkyo screenLayerInfo:
2017-02-28 23:58:47 ONKYO_AVR Onkyo screenLayerInfo: 2
Habi ich etwas verbogen? Der Zähler wirft immer 1 aus.
Der Onkyo macht dann immer ein reconnect - das Kommando funktioniert also, nur mit dem Zählen klappts noch nicht.
Gruß, Ronald
Hi,
nö passt, also von dir...
...zumindest teilweise ;)
Dass es 2x im Log steht liegt wohl an dem notify.
So wie ich das sehe triggert es auf:
2017-02-28 23:58:40 CUL_HM Remote8_2 Remote8_2_Btn_08 Short
und
2017-02-28 23:58:40 CUL_HM Remote8_2_Btn_08 Short (to HMUART)
Was passiert bei:
define Button8_Onkyo_stage notify Remote8_._Btn_08:Short {SetzeStage()}
So nun zum immer 1.
War ein Fehler von mir.
Ich dachte ich könnte die aktuelle Einstellung auslesen:
my $NextLs=ReadingsNum("Onkyo", "internet-radio-preset", 0);
(war anhand des set Kommandos von dir "geraten")
und dann um eins Hochzählen:
$NextLs += 1;
Aber es gibt wohl das Reading 'internet-radio-preset' nicht, also wird immer der Default '0' geliefert...
Entweder musst du dir den aktuellen Wert wo merken oder rausfinden im welchem Reading der aktuelle Wert steht.
EDIT: merken evtl. in einem userreading...
Laut dem set Befehl habe ich angenommen das Gerät/Device heißt Onkyo!?
Mach doch mal ein list des Gerätes...
...außer du weißt in welchem Reading der aktuelle Wert steht, dann einfach das ReadingsNum anpassen...
Gruß, Joachim
Hi Joachim,
wenn ich .* weglasse triggert das Notify gar nicht.
- 2017-03-01 00:37:45 CUL_HM Remote8_2 battery: ok
2017-03-01 00:37:45 CUL_HM Remote8_2 CMDs_done
2017-03-01 00:37:45 CUL_HM Remote8_2 Remote8_2_Btn_08 Short
2017-03-01 00:37:45 CUL_HM Remote8_2_Btn_08 Short (to HMUART)
2017-03-01 00:37:45 CUL_HM Remote8_2_Btn_08 trigDst_19A5F7: noConfig
2017-03-01 00:37:45 CUL_HM Remote8_2_Btn_08 trigger: Short_60
2017-03-01 00:37:45 CUL_HM Remote8_2_Btn_08 trigger_cnt: 60
2017-03-01 00:38:19 CUL_HM Remote8_2 battery: ok
2017-03-01 00:38:19 CUL_HM Remote8_2 CMDs_done
2017-03-01 00:38:19 CUL_HM Remote8_2 Remote8_2_Btn_08 Short
2017-03-01 00:38:19 CUL_HM Remote8_2_Btn_08 Short (to HMUART)
2017-03-01 00:38:19 CUL_HM Remote8_2_Btn_08 trigDst_19A5F7: noConfig
2017-03-01 00:38:19 CUL_HM Remote8_2_Btn_08 trigger: Short_61
2017-03-01 00:38:19 CUL_HM Remote8_2_Btn_08 trigger_cnt: 61
Da passiert dann nichts im Logfile.
Der Onky receiver hat ziemlich viele Einträge, siehe nachfolgende Liste.
Mir würde es eigentlich reichen einfach einen Zähler durchzutoggeln.
Ich mache ein Toggle mit Btn_07 short set Onky off und set Onkyo internet-radio-preset 1
Dann schaltet er ein und direkt auf Radio 1, Swiss pop, dann ist die Regierung zufrieden :-)
Der Befehl funktioniert auch noch nicht astrein, habe ich mir zusammengebastelt. Da könnte man ja den SetzeStage auch gleich mit auf 1 setzen, dann reicht mir das toggeln beginnend bei 1
- Internals:
CHANGED
Clients :ONKYO_AVR_ZONE:
DEF Onkyo
DeviceName Onkyo:60128
FD 20
INPUT 23
NAME Onkyo
NR 90
NTFY_ORDER 50-Onkyo
PARTIAL
PROTOCOLVERSION 2013
SCREENLAYER 0
STATE opened
TIMEOUT 3
TYPE ONKYO_AVR
ZONE 1
Readings:
2017-01-04 18:24:02 _SLZ 80
2017-01-06 13:46:19 _ZPW 01
2017-02-22 19:04:11 audin_ch
2017-02-22 19:04:11 audin_enc
2017-02-22 19:04:11 audin_srate
2017-03-01 00:37:12 audin_src
2017-03-01 00:37:12 audout_ch
2017-03-01 00:37:12 audout_mode
2017-01-01 15:20:50 center-temporary-level 0
2017-02-28 23:16:32 channel My_Favorites
2017-01-01 15:20:48 channelList AUPEO!_PERSONAL_RADIO,DLNA,Home_Media,Last.fm_Internet_Radio,MP3tunes,Mediafly,My_Favorites,Napster,Pandora_Internet_Radio,Rhapsody,SiriusXM_Internet_Radio,Slacker_Personal_Radio,Spotify,TuneIn,e-onkyo_music,radiko.jp,simfy,vTuner
2017-03-01 00:13:07 currentAlbum
2017-01-13 17:57:01 currentAlbumArtURI ./FHEM/lib/UPnP/sonos_empty.jpg
2017-01-13 17:57:01 currentAlbumArtURL ?/ONKYO_AVR/cover/empty.jpg
2017-03-01 00:13:07 currentArtist
2017-03-01 00:13:07 currentTitle
2017-01-01 15:20:48 currentTrackDuration --:--
2017-03-01 00:17:06 currentTrackPosition --:--
2017-03-01 00:16:06 input tv-cd
2017-01-01 15:20:48 inputList am,aux1,aux2,bd,cbl,cd,dlna,dvd,dvr,fm,game,internet-radio,iradio-favorite,multi-ch,music-server,net,network,p4s,pc,phono,sat,sirius,tape,tape-1,tape2,tuner,tv,tv-cd,universal-port,usb,usb-rear,usb-toggle,vcr,video1,video2,video3,video4,video5,video6,video7,xm
2017-01-04 18:24:03 ipod-mode-change OFF
2017-03-01 00:13:19 listening-mode direct
2017-01-04 18:24:10 music-optimizer off
2017-02-12 11:44:51 mute off
2017-01-03 22:55:12 network-standby on
2017-03-01 00:17:06 playStatus stopped
2017-03-01 00:13:19 power off
2017-02-16 14:34:28 presence present
2017-01-04 18:24:10 preset
2017-01-04 18:24:03 repeat off
2017-02-28 23:17:20 screenCurser -
2017-01-01 15:20:48 screenIconLeft 00
2017-02-28 23:16:32 screenIconRight 01
2017-02-28 22:32:27 screenItemC0000 vTuner Internet Radio
2017-01-15 13:03:16 screenItemC0001 Last.fm Internet Radio
2017-01-15 13:03:16 screenItemC0002 Spotify
2017-02-27 15:38:11 screenItemC0003 AUPEO! PERSONAL RADIO
2017-02-28 22:32:27 screenItemC0004 MP3tunes
2017-02-28 22:32:27 screenItemC0005 My Favorites
2017-02-28 22:32:27 screenItemC0006 DLNA
2017-01-11 20:08:48 screenItemC0007 Home Media
2017-01-15 13:03:21 screenItemC0008 Search Stations
2017-01-23 23:38:08 screenItemC0009 ---
2017-02-27 20:50:30 screenItemCnt 0000
2017-02-27 20:50:30 screenLayer 00
2017-03-01 00:13:06 screenLayerInfo 2
2017-03-01 00:13:06 screenListPos 0000
2017-01-01 15:20:48 screenStatus
2017-02-27 20:50:30 screenTitle
2017-02-28 23:16:32 screenType 2
2017-01-04 18:24:03 shuffle off
2017-01-01 15:20:50 sleep off
2017-03-01 00:37:12 state opened
2017-03-01 00:13:19 stateAV off
2017-01-01 15:20:50 subwoofer-temporary-level 0
2017-01-04 18:24:09 tone-front-bass 0
2017-01-04 18:24:09 tone-front-treble 0
2017-01-04 18:24:10 tunerFrequency 09920
2017-01-01 15:20:50 video-picture-mode custom
2017-01-03 22:55:12 vidin_cdepth
2017-01-03 22:55:12 vidin_cspace
2017-01-03 22:55:12 vidin_res
2017-01-03 22:55:12 vidin_src
2017-01-03 22:55:12 vidout_cdepth
2017-01-03 22:55:12 vidout_cspace
2017-02-26 23:09:32 vidout_dst
2017-02-26 23:09:32 vidout_mode
2017-02-26 23:09:32 vidout_res
2017-03-01 00:09:03 volume 8
Screen:
0:
List:
Fhem:
infix ONKYO_AVR
Helper:
nextConnectionCheck 1488325273.36309
Receiver:
Device:
Selectorlist:
Zonelist:
Zone:
1:
name Main
value 1
Input:
Input_aliases:
Input_names:
Attributes:
cmdIcon muteT:rc_MUTE previous:rc_PREVIOUS next:rc_NEXT play:rc_PLAY pause:rc_PAUSE stop:rc_STOP shuffleT:rc_SHUFFLE repeatT:rc_REPEAT
devStateIcon on:rc_GREEN@green:off off:rc_STOP:on absent:rc_RED playing:rc_PLAY@green:pause paused:rc_PAUSE@green:play muted:rc_MUTE@green:muteT fast-rewind:rc_REW@green:play fast-forward:rc_FF@green:play interrupted:rc_PAUSE@yellow:play
room Wohnzimmer
stateFormat stateAV
userattr room_map structexclude
webCmd volume:muteT:input:previous:next
Das notify für Btn_07 sieht in der FHEM.CFG so aus:
define Onkyo_an dummy
attr Onkyo_an alias Onkyo An/Aus
attr Onkyo_an devStateIcon an:remotecontrol/black_btn_GREEN aus:remotecontrol/black_btn_RED
attr Onkyo_an room Wohnzimmer
attr Onkyo_an setList state:an,aus
attr Onkyo_an webCmd state
#attr Onkyo_an verbose 5
define OnkyoSchalter notify (Remote8_._Btn_07:Short.*) { if (Value("Onkyo_an") eq "an") {fhem("set Onkyo off;;set Onkyo_an aus")} else { fhem("set Onkyo internet-radio-preset 1;;set Onkyo_an an")}}
Könnte man bestimmt auch sauberer definieren - ich lerne halt noch (aber erst wieder Abends, in 4 1/2 Stunden klingelt der Wecker)
Gruß, Ronald
Zu beginn: für Code, lists, etc. bitte "code-Tags" verwenden, das ist das '#' oben im "Menü"...
...so lässt es sich lechter lesen...
So, bevor hier noch mehr durcheinander geht (habe den Eindruck dass dem so ist) versuche ich mal zu verstehen/zu ordnen (was ich gedacht habe zu verstehen):
1. also du kannst mit:
set Onkyo internet-radio-preset 1
set Onkyo internet-radio-preset 2
set Onkyo internet-radio-preset 3
set Onkyo internet-radio-preset 4
set Onkyo internet-radio-preset 5
set Onkyo internet-radio-preset 6
wenn du es oben im WebCmd eingibst die Kanäle schalten!?
2. Wofür hast du den Dummy 'Onkyo_an'?
3. du willst auf 'Remote8_2_Btn_08 Short' triggern zum Weiterschalten? Und hast bei 1x drücken 2 Einträge im Log!? Wobei die geposteten Einträge eine "Pause" von mehr als 20Sec haben, die beiden Events aber gleich hintereinander kommen:
2017.02.28 23:46:39 1: SetzeStage nextLS: 1
2017.02.28 23:46:39 3: ONKYO_AVR set Onkyo internet-radio-preset 1
2017.02.28 23:47:01 1: SetzeStage nextLS: 1
2017.02.28 23:47:01 3: ONKYO_AVR set Onkyo internet-radio-preset 1
2017-02-28 23:58:40 CUL_HM Remote8_2 Remote8_2_Btn_08 Short
2017-02-28 23:58:40 CUL_HM Remote8_2_Btn_08 Short (to HMUART)
EDIT2: Falls du dich "nur" wunderst, dass 2 Einträge kommen: der mit '1:' vorne dran ist der aus der Funktion und der mit '3:' vorne dran ist der Schaltbefehl an den Onkyo, der kommt vom Onkyo-Modul (oder IODev falls es da so etwas gibt), kommt also "vom System"... (Die Nummer gibt den "verbosity-Level" an. Du kannst durch setzen entweder beim Modul oder global den Level hoch (5: viele Ausgaben) und runter (1 oder 0: wenige gar keine Ausgaben) setzen (also 2,3,4 geht nat. auch ;) ). Die 1 im Log-Aufruf Log(1,"HIER DIE AUSGABE") ist ebenfalls der Level. Da ich diese Ausgaben für Debug-Zwecke einbaue ist der Level auf 1, also sollte die Ausgabe "immer" kommen (außer wenn alle Ausgaben mittels 0 abgeschaltet wurden). Das aber nur so nebenbei... Du lernst ja noch ;)
EDIT3: nach der "Entwicklungsphase" lasse ich natürlich nur noch Ausgaben drin, die ich will und brauche. Entweder dann auskommentieren '#' davor oder halt den verbose-Level auf 4 oder 5 setzen: Log(4,"..."). So lässt sich die Ausgabe durch setzen des erwähnten Attributs 'verbose' steuern (ohne im Code wieder einkommentieren zu müssen)...
4. es gibt kein Reading 'internet-radio-preset' in dem die gesetzte Nummer steht. Gut nicht schilmm. Ich habe gesehen, dass im Reading 'Channel' wohl der aktuelle zu finden wäre ;) Du hast aber mehr als 6 Kanäle, oder? (ChannelList) Oder bringe ich da was durcheinandr? Wobei es nicht wirklich wichtig ist.
5. Den zuletzt gesetzten Wert musst du wo speichern (wenn man ihn tatsächlich nirgends auslesen kann und dazu kenne ich das Onkyo-Modul zu wenig/gar nicht). Entweder in einem 'userreading' beim Onkyo-Device ODER nachdem der dummy schon mal da ist einfach dort (vorausgesetzt der dummy ist tatsächlich notwendig)
D.h. die Funktion müsste dann so sein:
sub SetzeStage()
{
# hier wird der aktuelle Kanal ausgelesen
my $NextLs=ReadingsNum("Onkyo_an", "actChannel", 0);
# dann Kanal eins hoch ;)
$NextLs += 1;
# mal ausgeben wo wir sind
Log(1,"SetzeStage nextLS: $NextLs");
# prüfen ob schon Kanal 6 vorbei, dann wieder 1
if($NextLs > 6)
{
$NextLs =1;
}
# setze den Kanal beim Onkyo (vorasugesetzt das funktioniert siehe 1.)
{fhem ("set Onkyo internet-radio-preset $NextLs")}
# speichere die Kanalnummer im dummy (vorausgesetzt der dummy wird gebraucht siehe 5. / ansonsten halt userReading beim Onkyo)
{fhem ("setreading Onkyo_an actChannel $NextLs")}
}
Was mir noch nicht klar ist, ist bzgl. dem Trigger für's notify, ob das nun klappt oder nicht, siehe 3.
Viel Erfolg, Joachim
EDIT:
nur um mit dem Trigger und Event richtig zu liegen kannst du auch mal folgendes tun (mache ich während der Entwicklung eigentlich immer so).
Im notify beim Aufruf der Funktion das Event mit übergeben:
define Button8_Onkyo_stage notify Remote8_._Btn_08:Short.* {SetzeStage($EVENT)}
und die Funktion so anpassen:
sub SetzeStage($)
{
my ($Event) = @_;
my $NextChan = ReadingsNum("Onkyo_an", "actChannel", 0);
$NextChan += 1;
# mal ausgeben wo wir sind
Log(1,"SetzeStage Event: $Event NextChan: $NextChan");
# prüfen ob schon Kanal 6 vorbei, dann wieder 1
if($NextChan > 6)
{
$NextChan = 1;
}
# setze den Kanal beim Onkyo (vorasugesetzt das funktioniert siehe 1.)
{fhem ("set Onkyo internet-radio-preset $NextChan")}
# speichere die Kanalnummer im dummy (vorausgesetzt der dummy wird gebraucht siehe 5. / ansonsten halt userReading beim Onkyo)
{fhem ("setreading Onkyo_an actChannel $NextChan")}
}
Ich habe noch NextLs in NextChan geändert weil es ja um Kanäle und nicht um Lautstärke geht ;)
Hallo Joachim,
1. also du kannst mit:
set Onkyo internet-radio-preset 1
set Onkyo internet-radio-preset 2
set Onkyo internet-radio-preset 3
set Onkyo internet-radio-preset 4
set Onkyo internet-radio-preset 5
set Onkyo internet-radio-preset 6
wenn du es oben im WebCmd eingibst die Kanäle schalten!?
Jepp, das klappt problemlos :-)
Wenn der Onkyo aus ist schaltet er sich damit auch ein und geht direkt auf die gewählte Quelle.
2. Wofür hast du den Dummy 'Onkyo_an'?
Ziel ist mit mit Taste 7 den Onkyo zu toggeln zwischen aus und "an + Quelle internet radio preset 1
define OnkyoSchalter notify (Remote8_._Btn_07:Short.*) { if (Value("Onkyo_an") eq "an") {fhem("set Onkyo off;;set Onkyo_an aus")} else { fhem("set Onkyo internet-radio-preset 1;;set Onkyo_an an")}}
Das kann man bestimmt einfacher lösen, ich schaue mit if auf den status des dummys und schalten dann dazu den Onkyo an / aus und den dummy um.
3. du willst auf 'Remote8_2_Btn_08 Short' triggern zum Weiterschalten? Und hast bei 1x drücken 2 Einträge im Log!? Wobei die geposteten Einträge eine "Pause" von mehr als 20Sec haben, die beiden Events aber gleich hintereinander kommen:
Ich habe das wohl falsch beschrieben, ich habe machmal Probleme mit der HomeMatic Fernbedienung, weil die von FHEM kein ACK bekommt. Deshalb funktioniert wohl auch das short nicht sondern nur short.*
In meinem Post hatte ich 2 x gedrückt, es kam jeweils die gleiche Kanal Nummer.
Zu Edit 2:
Danke für die Tipps zum verbose und den Aufbau wie das zu lesen ist.
4. es gibt kein Reading 'internet-radio-preset' in dem die gesetzte Nummer steht. Gut nicht schilmm. Ich habe gesehen, dass im Reading 'Channel' wohl der aktuelle zu finden wäre ;) Du hast aber mehr als 6 Kanäle, oder? (ChannelList) Oder bringe ich da was durcheinandr? Wobei es nicht wirklich wichtig ist.
Ja, ich kann da bis zu 40 Kanäle anlegen. Es gibt auch eine "klassische Fernbedienung zu dem Onkyo, funktioniert aber nicht, da das Teil im Schrank ist und der IR nicht durch kommt.
Wenn ich mehr will, z.B. den Fernsehton via Onkyo wiedergeben, Bluray Kanal wählen, ... nehme ich die Onkyo App auf dem Handy.
Meistens reicht es aber ein paar Lieblingskanäle zu schalten (Btn8 short), Volume regeln (Btn 7,8 long) oder ein aus (Btn 7 short).
An der Eingangstür habe ich noch eine 6er HM Tastatur. Da werden über Btn 1,3,4,5,6 Schalter und Dimmer getoggelt. Mit Btn 2 schalte ich alle Lampen und den Onky aus.
Mit der Logik kommt meine Frau auch top zurecht - so soll es sein.
So nun zu den Änderungsvorschlägen:
define Button8_Onkyo_stage notify Remote8_._Btn_08:Short.* {SetzeStage($EVENT)}
habe ich eingetragen.
in der 99_myUtils.pm Deinen unten genannten Code eingetragen.
sub SetzeStage($)
{
my ($Event) = @_;
my $NextChan = ReadingsNum("Onkyo_an", "actChannel", 0);
$NextChan += 1;
# mal ausgeben wo wir sind
Log(1,"SetzeStage Event: $Event NextChan: $NextChan");
# prüfen ob schon Kanal 6 vorbei, dann wieder 1
if($NextChan > 6)
{
$NextChan = 1;
}
# setze den Kanal beim Onkyo (vorasugesetzt das funktioniert siehe 1.)
{fhem ("set Onkyo internet-radio-preset $NextChan")}
# speichere die Kanalnummer im dummy (vorausgesetzt der dummy wird gebraucht siehe 5. / ansonsten halt userReading beim Onkyo)
{fhem ("setreading Onkyo_an actChannel $NextChan")}
}
Das funzt prima und macht genau, was es soll.
Bin bestens zufrieden, danke für den ausführlichen Support.
Wenn ich mal wieder etwas Ruhe habe schaue ich mir die off / preset 1 Geschichte für Btn 7 an, das müsste doch auch genauso mit einer Sub gehen.
Jetzt bin ich erst Mal Top zufrieden :)
Gruß, Ronald
Hallo Ronald,
freut mich!
Schön zu hören, dass es jetzt endlich klappt...
...noch besser, dass/wenn du was gelernt hast...
EDIT: evtl. noch die Logausgaben überarbeiten, nicht dass dein Log unnötig voll läuft...
EDIT2: bzgl. des roten Blinken evtl. mal hier: https://wiki.fhem.de/wiki/HomeMatic#Peeren und hier: https://wiki.fhem.de/wiki/Virtueller_Controller_VCCU (eine anzulegen schadet nicht und hat Vorteile / Forumssuche sagt bestimmt mehr dazu) schauen...
Viel Spaß noch!
Aber Achtung: es findet sich immer was zu tun... ;)
Gruß, Joachim
P.S.: evtl. noch als gelöst "kennzeichnen", z.B. durch umbenennen in "[gelöst] Radio Kanäle toggeln"
Hallo Joachim,
eine Frage zum Umbenennen:
Einen Button zum Umbenennen habe ich nicht gefunden, nur verschieben.
Da kann ich zwar auch ein Häkchen bei umbenennen setzen, dann steht bei verschieben "verschieben nach Forum".
Wie klappt das sauber mit dem umbenennen?
Zum Thema habe ich noch ein paar Änderungen vorgenommen:
Wenn der Onkyo direkt über Toggeln Kanäle eingeschaltet wird habe ich in der 99_myUtils.pm noch ergänzt:
{fhem ("set Onkyo_an an")}
Dadurch wird der Dummy auch umgeschaltet, wenn man über Toggeln Kanäle auch direkt den Onkyo einschaltet.
Gleiches habe ich auch für Btn_2 - All Off ergänzt.
Da wurde vorher nur der Onkyo ausgeschaltet, jetzt wird auch der Dummy mit umgeschaltet:
{ fhem("set Wohnraum off;set Onkyo off;set Onkyo_an aus")}
Insofern alles gut - jetzt muss ich das Thema nur noch als [gelöst] markieren.
Gruß, Ronald
Hmm ich hab's schon lange nicht mehr gemacht...
Aber wenn du auf ändern gehst kannst du dann den Namen nicht editieren??
Ansonsten: is nicht wichtig/schlimm würde nr zeigen, dass das Problem gelöst ist...
Viel Spaß noch, Joachim
So, hat anscheinend mit dem umbenennen ohne verschieben geklappt, bis demnächst ;)