Hi!
Ich hoffe das ist jetzt im richtigen Forum ::)
Ich habe anhand dieses Beitrages http://forum.fhem.de/index.php?topic=17997.0 (http://forum.fhem.de/index.php?topic=17997.0) (Antwort #2) folgendes in meine fhem.cfg geschrieben:
##########
#
# Heizkörper Ein oder Aus
#
##########
define Automatische_Heizung_EinAus dummy
attr Automatische_Heizung_EinAus alias Betriebsmodus1
attr Automatische_Heizung_EinAus setList state:auto,manu
attr Automatische_Heizung_EinAus webCmd state
# mode [auto|manu]
define Automatische_Heizung_EinAus_Auto notify Automatische_Heizung_EinAus:auto {\
fhem("set AZ_Heizungsregler controlMode auto");;\
fhem("set AZ_Heizung burstXmit");;\
}
define Automatische_Heizung_EinAus_Manu notify Automatische_Heizung_EinAus:manu {\
fhem("set AZ_Heizungsregler controlManu off");;\
fhem("set AZ_Heizung burstXmit");;\
}
Der Hintergedanke dabei ist denke ich klar... ich will, wenn die Heizsaison vorbei ist, mit einem Klick alle Heizkörper ausschalten...
ABER sobald ich "an" statt "auto" und "aus" statt "manu" verwende funktioniert es nicht mehr...
Deshalb meine Fragen:
1. Wie muss ich diese Notify-Funktion umschreiben dass ich "an" und "aus" zur auswahl habe?
2. Links vom Dropdown steht der aktuelle Status (siehe Bild)... wie bekomme ich den weg? Dadurch dass im Dropdown der aktuelle Atatus seht benötige ich ihn nicht...
Vielen Dank im Voraus!!
Lg Clemens
Hallo,
1 lässt sich auf einen Schlag erledigen 8)
Erst:
Wirf setList raus und nimm nur webCmd
attr Automatische_Heizung_EinAus webCmd Ein:Aus
Nun:
Pass das regexp entsprechend an:
define Automatische_Heizung_EinAus_Auto notify Automatische_Heizung_EinAus:Ein {
define Automatische_Heizung_EinAus_Manu notify Automatische_Heizung_EinAus:Aus {
Zu 2: Keine Ahnung aber die Frage wird sich jetzt vermutlich erübrigt haben.
Grüße
P.S.: Meine Beispiele kannst du nicht direkt in die fhem.cfg einfügen - Sonderzeichen etc. bitte selbst hinzu fügen oder den bequemeren Weg wählen und das DEF bearbeiten.
Die eleganteste "Notlösung" für Deine 2. Frage ist devStateIcon; dann hast Du keinen doppelten Text, sondern ein passendes Bildchen. ;)
Statt 2 notify'sss kannst Du auch 1 nehmen und dann mit "if dies - dann das - sonst jenes" weitermachen.
Automatische_Heizung_EinAus_Auto notify Automatische_Heizung_EinAus:.* {
Ich habe das über einen Funktionsaufruf im notify, und die Funktion in der 99_myUtils macht dann den Rest...
### Heizungsmodus setzen ###
define Heizungsmodus dummy
attr Heizungsmodus devStateIcon auto:sani_heating_automatic FHEM:sani_heating_manual AUS:secur_heat_protection Frostschutz:temp_frost
attr Heizungsmodus group Heizung
attr Heizungsmodus icon temp_inside
attr Heizungsmodus room Wohnung
attr Heizungsmodus setList state:auto,FHEM,Frostschutz,AUS
attr Heizungsmodus sortby 01
attr Heizungsmodus webCmd state
define n_Heizungsmodus notify Heizungsmodus:.* {HeizMode}
######## Heizungsmodus setzen ############
sub
HeizMode()
{
if (Value("Heizungsmodus") eq "auto" ) {
{ fhem ("set .*_Heizung_Clima controlMode auto") }};
if (Value("Heizungsmodus") eq "FHEM" ) {
{ fhem ("set .*_Heizung_Clima controlManu 18.0") }};
if (Value("Heizungsmodus") eq "Frostschutz" ) {
{ fhem ("set .*_Heizung_Clima controlManu 10.0") }};
if (Value("Heizungsmodus") eq "AUS" ) {
{ fhem ("set .*_Heizung_Clima controlManu off") }};
}
Die Thermostate heissen bei mir z.B. wz_Heizung für Wohnzimmer und ku_Heizung für Küche; über das .*_Heizung_Clima kann ich alle ansprechen, ohne dafür ein zusätzliches structure anzulegen.
Gruß,
Hollo
Hi ihr 2!
@Puschel74:
Hat Perfekt funktioniert! Danke!
@Hollo
Eleganter ist die If funktion... werde morgen mal versuchen auch diese zum laufen zu bekommen...
Kommen if-Funktionen immer in die 99_myUtils? ich muss mich erst in die if else geschichte einlesen wie das hier läuft... ich kenne es nur von PHP
Danke vorerst, aber ich denke da kommt sicherlich noch eine Frage zu dem Thema ;)
Lg Clemens
Hallo,
ZitatKommen if-Funktionen immer in die 99_myUtils?
Nein - oder anders gesat: Wie es dir beliebt.
Du kansnt ein notify oder at bauen mit if/else drin.
Du kannst auch deine Codes in eine 99_myUtils.pm packen und dort mit if/else arbeiten.
Je nachdem wie es dir gefällt.
Grüße
Zitat von: igelkotze am 30 Oktober 2014, 16:17:20
...ich muss mich erst in die if else geschichte einlesen wie das hier läuft... ich kenne es nur von PHP...
Das Grundkonzept ist ja immer gleich; man muss nur auf die Syntax mit Klammern und Semikola achten.
Ob Befehlszeile, cfg, oder 99_myUtils muss jeder nach seinen Vorlieben entscheiden.
Ich habe die config gerne übersichtlich und dafür Funktionen in der Utils.
Liegt aber auch etwas daran, dass ich mit laaaangen Einzeilern auf Kriegsfuss stehe (Excelschaden) und lieber übersichtliche Funktionen habe. Da kann ich jederzeit nach Belieben ergänzen oder ändern. :D
Hallo,
mit Einzeiler steh ich auch auf Kriegsfuss aber per DEF ein notify oder at (oder was auch immer) ist doch easy bearbeitet.
Und if/else - naja, ein bischen Eigenengagement braucht man bei FHEM sowieso.
Egal ob if/else (Perl) oder DOIF oder notify oder at.
Aber es macht Spaß wenn es klappt ;D
Grüße
Macht man das Ganze ohne eine util, würde der Code dann so aussehen ?
### Heizungsmodus setzen ###
define Heizungsmodus dummy
attr Heizungsmodus devStateIcon auto:sani_heating_automatic FHEM:sani_heating_manual AUS:secur_heat_protection Frostschutz:temp_frost
attr Heizungsmodus group Heizung
attr Heizungsmodus icon temp_inside
attr Heizungsmodus room Wohnung
attr Heizungsmodus setList state:auto,FHEM,Frostschutz,AUS
attr Heizungsmodus sortby 01
attr Heizungsmodus webCmd state
define n_Heizungsmodus notify Heizungsmodus:.* {\
if (Value("Heizungsmodus") eq "auto" ) {\
{ fhem ("set .*_Heizung_Clima controlMode auto") }};\
if (Value("Heizungsmodus") eq "FHEM" ) {\
{ fhem ("set .*_Heizung_Clima controlManu 18.0") }};\
if (Value("Heizungsmodus") eq "Frostschutz" ) {\
{ fhem ("set .*_Heizung_Clima controlManu 10.0") }};\
if (Value("Heizungsmodus") eq "AUS" ) {\
{ fhem ("set .*_Heizung_Clima controlManu off") }};\
}