Nützliche aliase

Begonnen von P.A.Trick, 13 Oktober 2015, 19:36:13

Vorheriges Thema - Nächstes Thema

P.A.Trick

Da ich die cmdalias Funktion für völlig unterbewertet halte, möchte ich noch weitere sinnvolle Befehlskombinationen in diesem Thread sammeln!
Ich fange mal an:

Zeigt alle ignorierten Geräte in FHEM
define c_showignoreddevices cmdalias showignoreddevices AS { join("\n", grep { $attr{$_}{ignore} } sort keys %attr ) }

Und hier noch ein Pendant für Geräte ohne Typdeklaration!

define c_shownotypedevices cmdalias shownotypedevices AS { join("\n", grep { !defined($defs{$_}{TYPE}) } keys %defs) }


Wiki: http://www.fhemwiki.de/wiki/Cmdalias#Beispiele
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

harway2007

und wie ruft man die Aliase ab ?
MFG Harway

marvin78

Commandref zu cmdalias!

In dem Fall:

shownotypedevices

Rince

Einfach ihren Namen eintippern...
Also das, was vor dem AS steht. Das könnte auch ein Befehl (set lamp1 on) sein.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Rince

Ohne konkreten Codeschnipsel, aber praktisch:

Wenn man bei bestimmten Geräten (z.B. MiLights) kein off erlauben will, kann man das so z.B. auf ein anderes Gerät umbiegen.

define aliasMiLight_1 cmdalias set MiLight_1 off AS set HMSchaltaktor_1 off



Der Vorteil im Vergleich zu einem Notify:
Der ursprüngliche Befehl wird nicht verarbeitet
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

P.A.Trick

#5
Auch ein cooles Anwendungsbeispiel!

Hier noch ein einfacher Tipp zum aktivieren des verbose 5 logs

define c_v5 cmdalias v5 AS attr global verbose 5

und zurück zum verbose 3 mit v3

define c_v3 cmdalias v3 AS attr global verbose 3
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

P.A.Trick

#6
Und heute noch einer ,-)

Wer das Text2spech Modul verwendet kann die Sprachausgabe vereinfachen:

define c_say cmdalias say .* AS set MyTTS tts '$EVENT'

say Hallo  ist einfach einfacher ;-) Funktioniert auch in Notifies usw!
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

rapster

Hier ein cmdalias um einen room umzubennen ohne dabei die devices aus anderen räumen zu entfernen

define cmd_roomrename cmdalias roomrename .* AS { for my $name (devspec2array("room=$EVTPART0")){ map {s/$EVTPART0/$EVTPART1/;; fhem("attr $name room $_")} AttrVal($name,'room','') } }

Zitatroomrename oldroom newroom


Gruß
  Claudiu

Rince

Sehr schick das.
Die cmdaliase sollten ins Wiki...
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

rapster

#9
Passend zu "roomrename" hier noch ein "roomdelete" cmdalias um einen Raum zu löschen ohne die betroffenen Geräte auch aus anderen Räumen zu löschen.

define cmd_roomdelete cmdalias roomdelete .* AS { for my $name (devspec2array("room=$EVENT")){ map { /^$EVENT$/ ? fhem("deleteattr $name room") : do{s/,$EVENT|$EVENT,//;; fhem("attr $name room $_")} } AttrVal($name,'room','') } }

Zitatroomdelete roomName

Gruß
  Claudiu

P.A.Trick

Zitat von: Rince am 16 Oktober 2015, 19:34:07
Sehr schick das.
Die cmdaliase sollten ins Wiki...

Ok werde ich morgen machen!

Hier noch einer:

define ls cmdalias ls .* AS list .*$EVENT.*


Kurze Version von list die auch mit Teilen des Devices etwas anfangen kann!
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

Icinger

Die Verbose 3 und Verbose 5 von P.A.Trick könnte man noch verfeinern:

define v5 cmdalias v5 .* AS {fhem ("attr ".($EVENT||="global")." verbose 5")}
sowie
define v3 cmdalias v3 .* AS {fhem ("attr ".($EVENT||="global")." verbose 3")}

Somit kann man optional auch ein Device angeben, für das der verbose gesetzt wird.

lg, Ici
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

P.A.Trick

Zitat von: Icinger am 16 Oktober 2015, 21:20:41
Die Verbose 3 und Verbose 5 von P.A.Trick könnte man noch verfeinern:

define v5 cmdalias v5 .* AS {fhem ("attr ".($EVENT||="global")." verbose 5")}
sowie
define v3 cmdalias v3 .* AS {fhem ("attr ".($EVENT||="global")." verbose 3")}

Somit kann man optional auch ein Device angeben, für das der verbose gesetzt wird.

lg, Ici

Geil :-) Danke!
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

rapster

#13
Heut nochmal einen etwas größeren cmdalias "regroup", ist zwar leider etwas lang aber hab ich schon paar mal gebrauchen können :)


define cmd_regroup cmdalias regroup .* AS { my @EVTPART=split(' ',$EVENT);; $EVTPART[2] =~ s/\|/:FILTER=/g if($EVTPART[2]);; for my $name (devspec2array("group=".($EVTPART[0] ? $EVTPART[0] : '.*').($EVTPART[2] ? ":FILTER=$EVTPART[2]" : ''))){ map { ($_ && /^$EVTPART[0]$/ && !$EVTPART[1]) ? fhem("deleteattr $name group") : do{ if(!$EVTPART[1]){$EVTPART[0]=",$EVTPART[0]|$EVTPART[0],";; $EVTPART[1]='';;} s/$EVTPART[0]/$EVTPART[1]/;; fhem("attr $name group $_")} } AttrVal($name,'group',0) } }


Zitat
regroup <oldGroup> [<newGroup> [<FILTER>][|<FILTER2>]...]

# Allen devices ohne group die Gruppe 'myGroup' setzen:
regroup 0 myGroup

# Nur den devices im Raum 'myRoom' welche keine group haben die Gruppe 'myGroup' setzen:
regroup 0 myGroup room=myRoom

# Alle devices aus 'oldGroup' in 'newGroup' verschieben
regroup oldGroup newGroup

# Nur die devices im Raum 'myRoom' aus 'oldGroup' in 'newGroup' verschieben
regroup oldGroup newGroup room=myRoom

# Gruppe 'myGroup' löschen
regroup myGroup

# Nur die devices im Raum 'myRoom' aus der Gruppe 'myGroup' löschen.
regroup myGroup 0 room=myRoom

# Devices aus allen Gruppen welche mit 'licht' beginnen aus Raum 'Obergeschoss' entfernen.
regroup licht.* 0 room=Obergeschoss

# Devices aus dem Raum 'myRoom'  aus allen Gruppen entfernen und in die Gruppe 'myGroup' verschieben.
regroup .* myGroup room=myRoom

# Devices ohne Gruppe aus dem Raum 'myRoom' mit dem TYPE 'CUL_HM' und welche ebenfalls 'Licht' im Namen enthalten die Gruppe 'myGroup' hinzufügen
regroup 0 myGroup room=myRoom|TYPE=CUL_HM|NAME=.*Licht.*
- Die zusätzlichen Gruppen in welchen sich die devices sonst noch befinden bleiben unberührt.
- Als FILTER kann alles was der normale fhem-devspec filter verarbeiten kann angegeben werden.

Es sollte nur aufgepasst werden wenn ein device mehrere ähnlichen Gruppenbennungen wie "attr name group test2,test" hat.
Wenn man hier ein 'regroup test test3' macht, könnte es passieren dass man dadurch bei diesem device die Gruppe 'test2' nach 'test32' umbenennt.
In dem Beispiel müsste man den Befehl z.B. mit 'regroup test$ test3' angeben damit das nicht passiert. Das sollte denke ich allerdings kaum vorkommen.

Gruß
  Claudiu

P.A.Trick

#14
So ich habe mal eine Wiki Seite angelegt:

http://www.fhemwiki.de/wiki/Cmdalias#Beispiele

Wer Langeweile hat kann gerne die Beispiel übernehmen! :D


UPDATE: Ich hatte Langeweile ;-)
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn