FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: pula am 26 Dezember 2014, 19:12:08

Titel: Gelöst: Anfänger - Umstellen von Templist per button/Liste
Beitrag von: pula am 26 Dezember 2014, 19:12:08
Hallo,

ich fange grade an, mich mit fhem zu beschäftigen und habe mir unter anderem mal einen HM-Lan-Adapter, einen HM-Thermostat und Regler für einen Heizkörper besorgt. Das funktioniert grundsätzlich auch gut.
Habe nun ein paar Temperaturlisten angelegt (bin zb öfter beruflich auf Reisen und da sollen die Temperaturen natürlich anders sein, als wenn ich zu Hause bin) und die werden mittlerweile auch richtiig geladen und aktiviert.
Allerdings muß das immer per Befehl gemacht werden. Das funktioniert zwar, ist aber ein wenig unbequem.
Besser wäre es, wenn ich einen entsprechenden Button hätte, in der ich die verschiedenen entities einfach aktivieren kann.
Was mir dazu fehlt, ist ein Ansatz, wie so etwas in fhem zu realisieren ist.

Ich habe mich bereits im Forum eingelesen und ein wenig herumexperimentiert, allerdings bin ich noch nicht auf für mich hilfreiche Informationen gestoßen.
Ach ja - ich denke zwar, daß das nicht relevant ist, aber der Vollständigkeit halber:
Ich betreibe fhem auf einem Fedora-Server in der Version 5.6. Ich habe mal ein Update versucht, danach allerdings beim Start von fhem einen Fehler bekommen, daher bin ich wieder zurückgestiegen....

Vielen Dank im Voraus für hilfreiche Antworten :-)

Cheers,

Otto

PS: Die Lösung war folgendes (aus meiner fhem.cfg):

efine HeizungUmschalten dummy
attr HeizungUmschalten webCmd Linz:Wien:UrlaubDaheim:UrlaubWeg
define n_HeizungUmschalten notify HeizungUmschalten {\
if($EVENT eq "Wien") {\
    Log(3,"1. $EVENT");;\
  }\
  elsif($EVENT eq "Linz") {\
    Log(3,"2. $EVENT");;\
  }\
  else {\
    Log(3,"3. $EVENT");;\
  }\
}
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: Puschel74 am 26 Dezember 2014, 21:02:56
Hallo,

erst das
ZitatIch betreibe fhem auf einem Fedora-Server in der Version 5.6. Ich habe mal ein Update versucht, danach allerdings beim Start von fhem einen Fehler bekommen, daher bin ich wieder zurückgestiegen....
mit dem fehlerhaften Update beheben und dann das andere.

Eine aktuelle Version (resp. ein funktionierendes update) ist allemal wichtiger als dein Button.

Die Fehlermeldung mit genauem Wortlaut - copy&paste nach Eingabe von update in der Befehlszeile - wäre gut.

Grüße
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: chris1284 am 26 Dezember 2014, 21:52:29
erstmal schauen das dein fhem aktuell ist, siehe  Puschel74's antwort

zu lösung für die templisten:
-definiere einen dummy
-gib dem dummy per attr webCmd ein paar befehle mit, die man dann klicken kann (zb urlaub:arbeit:reise)
-bau dir ein notify welches auf den dummy reagiert und hinterleg dort die befehle die du zur zeit noch in fhem eingeben musst
(zb bei reise -> set .... , bei urlaub -> set ..., usw)
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: wkarl am 26 Dezember 2014, 21:58:54
Hallo Otto,

Ich betreibe fhem auf einem Fedora-Server in der Version 5.6. Ich habe mal ein Update versucht, danach allerdings beim Start von fhem einen Fehler bekommen,

was hast Du upgedated? fhem? Ein fhem-update macht die Datei fhem.pl nicht ausführbar (warum auch immer), mit chmod 755 fhem.pl wird dies korrigiert.

ciao walter
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: pula am 26 Dezember 2014, 22:46:39
Hallo,

erstmal danke an alle für die hilfreichen Antworten.
Ich habe das Update gestern versucht und dann einen Fehler in irgend einem perl-Modul beim Start von fhem bekommen.
Ein Update grade jetzt hat aber funktioniert:

# $Id: fhem.pl 7301 2014-12-22 07:12:41Z rudolfkoenig $
# $Id: 10_CUL_HM.pm 7293 2014-12-21 18:09:32Z martinp876 $
# $Id: 01_FHEMWEB.pm 7284 2014-12-21 16:18:32Z rudolfkoenig $
# $Id: 92_FileLog.pm 7135 2014-12-05 21:11:17Z rudolfkoenig $
# $Id: 00_HMLAN.pm 7104 2014-11-30 18:55:56Z martinp876 $
# $Id: 98_HMinfo.pm 7086 2014-11-29 09:40:41Z martinp876 $
# $Id: 82_LGTV2012.pm 2 2014-03-17 11:05:19Z juliantatsch $
# $Id: 99_SUNRISE_EL.pm 6765 2014-10-14 18:24:29Z rudolfkoenig $
# $Id: 98_SVG.pm 7245 2014-12-17 16:13:07Z rudolfkoenig $
# $Id: 99_Utils.pm 6660 2014-10-03 06:35:43Z rudolfkoenig $
# $Id: 98_XmlList.pm 2895 2013-03-11 19:48:01Z rudolfkoenig $
# $Id: 90_at.pm 7000 2014-11-16 16:51:50Z rudolfkoenig $
# $Id: 98_autocreate.pm 6505 2014-09-06 12:24:48Z rudolfkoenig $
# $Id: 91_eventTypes.pm 7221 2014-12-15 10:02:49Z rudolfkoenig $
# $Id: 91_notify.pm 7260 2014-12-19 12:50:49Z rudolfkoenig $
# $Id: 98_telnet.pm 6611 2014-09-24 07:48:32Z rudolfkoenig $


@wkarl: danke für den Hinweis - aber ich starte per shell-Skript mit perl fhem.pl.... - das sollte also irrelevant sein. Kann aber bestätigen, daß die neue fhem.pl kein x hat...
@chris1284: super, danke sehr! ich werde das morgen ausprobieren. bin schon gespannt, ob das dummy dann auch in andfhem auftaucht...

cheers,

Otto
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: pula am 28 Dezember 2014, 16:24:29
Hallo nochmal,

irgendwie stehe ich aufm schlauch :-(
ich habe nun folgendes definiert:
define HeizungUmschalten dummy
attr HeizungUmschalten room Heizung
attr HeizungUmschalten setList state:Linz,Wien,UrlaubDaheim,UrlaubWeg
attr HeizungUmschalten webCmd state
define n_HeizungUmschalten notify HeizungUmschalten {Log (1,"n_HeizungUmschalten UrlaubDaheim")}


Das notify reagiert noch nicht. Ich habe mal ein getstate HeizungUmschalten abgesetzt, da bekomme ich nichts zurück. Bei echten Devices funktioniert getstate aber.

Auch etwas in der Art
define n_HeizungUmschalten notify HeizungsumSchalten {if ({fhem("get HeizugUmschalten param state") eq "UrlaubDaheim"}) fhem{"Log ("n_HeizungUmschalten UrlaubDaheim")"}


funktioniert leider nicht.

Weiß jemand, wo mein Denkfehler liegt?
Kleine Zusatzfrage: Weiß jemand, wie das in fhem mit verschachtelten Hochkommata gehandhabt wird, zb bei
...fhem{"Log ("n_HeizungUmschalten UrlaubDaheim")"}

Vielen Dank im Voraus!

Cheers,

Otto
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: dindihi am 28 Dezember 2014, 17:46:31
Versuch's mal damit:

define notify_abwesend notify Abwesend.* { if("$EVENT" =~ m/on/) {Log(1,"Abwesend set to on")} else {Log(1,"Abwesend set to off")}}

(Achtung, bin noch Anfänger!  ;) )
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: pula am 28 Dezember 2014, 19:50:47
Hallo dindihi,

vielen Dank für Deine Antwort. Leider kann ich das noch zu wenig abstrahieren, daß mir das weiterhelfen würde.

Vielleicht kann ich die Frage anders formulieren:

Weiß jemand, wie man den state von einem dummy auslesen kann?

Danke und cheers,

Otto
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: Puschel74 am 28 Dezember 2014, 20:09:28
Hallo,

Zitat von: otto001 am 28 Dezember 2014, 19:50:47

Weiß jemand, wie man den state von einem dummy auslesen kann?

Danke und cheers,

Otto

Mit Value - Value("Name_des_Dummy") sollte das sein was du suchst.

Grüße
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: pula am 28 Dezember 2014, 21:21:32
Hi nochmal,

vielen Dank für Eure Hilfe, aber scheinbar bin ich zu doof :-(

wenn ich im Web-Frontend den Wert des Dummys mittels Liste ändere, bekomme ich im Log:

Cmd: >set HeizungUmschalten  UrlaubDaheim<
2014.12.28 21:15:55 4: dummy set HeizungUmschalten UrlaubDaheim
2014.12.28 21:15:55 5: Triggering HeizungUmschalten (1 changes)
2014.12.28 21:15:55 5: Notify loop for HeizungUmschalten UrlaubDaheim
2014.12.28 21:15:55 4: eventTypes: dummy HeizungUmschalten UrlaubDaheim -> UrlaubDaheim
2014.12.28 21:15:55 4: eventTypes: dummy HeizungUmschalten state: UrlaubDaheim -> state: UrlaubDaheim


Also, das Umschalten selber klappt schon und der value ändert sich auch in der Oberfläche.

Nun habe ich mal mein (erstes) notify versucht:

define n_HeizungUmschalten notify HeizungsumSchalten {if ({fhem("Value("HeizugUmschalten"") eq "UrlaubDaheim"}) fhem{"Log ("n_HeizungUmschalten UrlaubDaheim")}

Und eigentlich sollte dann im log irgendwie die Meldung "n_HeizungUschalten UrlaubDaheim" aufscheinen, tut es aber nicht?
Sorry, wenn ich ein wenig nerve, aber meine Versuche, mich heranzutasten sind noch ein wenig tapsig...

Cheers,

Otto
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: Doggiebert am 28 Dezember 2014, 22:25:11
ja öha, was machst Du denn da mit den Klammern?
Nachdem Du Dich jetzt schon bissl eingelesen hast, die nächste Lektüre für das Arbeiten mit perl in notifys: http://raspi:8082/fhem/docs/commandref.html#perl (http://raspi:8082/fhem/docs/commandref.html#perl)

Du kannst dem notify entweder direkt fhem-Befehle (ohne Klammern) mitgeben, oder Du machst ein perl-Statement - sowas wird in fhem immer mit geschweiften Klammern gemacht, aber nur 1 Paar geschweifte Klammern aussenrum, damit Fhem weiß, dass jetzt perl code kommt.

Ohne es ausprobiert zu haben, probier's doch mal so:
define n_HeizungUmschalten notify HeizungsumSchalten {if (Value("HeizugUmschalten") eq "UrlaubDaheim") Log(1, "n_HeizungUmschalten UrlaubDaheim")}
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: dindihi am 28 Dezember 2014, 23:22:38
Bin mir jetzt nicht sicher, aber könnte die IF Anweisung nicht auch so aussehen:

define n_HeizungUmschalten notify HeizungsumSchalten IF ([HeizugUmschalten:&STATE] eq "UrlaubDaheim") Log(1, "n_HeizungUmschalten UrlaubDaheim")

?
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: pula am 28 Dezember 2014, 23:28:09
Danke für Eure Antworten. Aber es tut nicht.
kann aber auch sein, daß es an der log-function liegt.
muss mir erst noch einen besseren weg ausdenken, wie ich rausfinden kann, ob ein notify mit if funktioniert, dachte mir aber, daß ein log-entry ein guter ansatz wäre...
naja, ich werde morgen weiterprobieren. danke nochmal!

cheers,
Otto
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: chris1284 am 29 Dezember 2014, 16:14:21
Probier mal

define n_HeizungUmschalten notify HeizungsumSchalten {
if ($EVENT eq "UrlaubDaheim")
{Log 3, ("n_HeizungUmschalten: $EVENT.");}
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: pula am 29 Dezember 2014, 18:31:10
@chris: Danke sehr, funktioniert aber leider auch nicht :-(

Folgendes im Log:
Cmd: >set HeizungUmschalten  UrlaubDaheim<
2014.12.29 18:26:43 4: dummy set HeizungUmschalten UrlaubDaheim
2014.12.29 18:26:43 5: Triggering HeizungUmschalten (1 changes)
2014.12.29 18:26:43 5: Notify loop for HeizungUmschalten UrlaubDaheim
2014.12.29 18:26:43 4: eventTypes: dummy HeizungUmschalten UrlaubDaheim -> UrlaubDaheim
2014.12.29 18:26:43 4: eventTypes: dummy HeizungUmschalten state: UrlaubDaheim -> state: UrlaubDaheim


Ich habe langsam das Gefühl, daß das so nicht funktioniert.
Die einzige Möglichkeit, die ich bisher gefunden habe, um das Reading rauszubekommen, ist
list HeizungUmschalten state
Ergebnis im Web-Frontend:

HeizungUmschalten 2014-12-29 18:26:43 UrlaubDaheim


Meine Idee dazu, wäre mir eine perl-Routine zu bauen, die den String splittet und das letzte Wort zurückgibt.
In diesem Fall also den String "UrlaubDaheim".
Was meint ihr zu diesem Plan?
Es wundert mich, daß so etwas nicht häufiger von Benutzern gebraucht wird?!

Danke im voraus!

Cheers,

Otto
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: Puschel74 am 29 Dezember 2014, 18:55:59
Hallo,

ZitatEs wundert mich, daß so etwas nicht häufiger von Benutzern gebraucht wird?!
Also bei mir funktioniert das einwandfrei.

Grad auf meiner Versuchsinstallation einen Dummy angelegt:
define anwesend dummy
attr anwesend webCmd Auto:Day:Night

Das notify drauf gepackt:
anwesend {
if($EVENT eq "Auto") {
    Log(3,"1. $EVENT");
  }
  elsif($EVENT eq "Day") {
    Log(3,"2. $EVENT");
  }
  else {
    Log(3,"3. $EVENT");
  }
}

Und bekomm im Logfile nach anklicken der 3 webCmd:
Zitat2014.12.29 18:53:24 3: 1. Auto
2014.12.29 18:53:26 3: 2. Day
2014.12.29 18:53:27 3: 3. Night

Grüße

Edith: Ich weiß das die if-Abfrage an dieser Stelle sinnlos ist für diese Art der Ausgabe  ;)
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: pula am 29 Dezember 2014, 19:18:30
Hallo,

ich hab jetzt mal folgendes probiert:

define n_HeizungUmschalten notify HeizungUmSchalten {if (index (fhem("list HeizungUmschalten state"),"UrlaubDaheim",0 ) != -1)} Log 5, ("n_HeizungUmschalten: $EVENT.")


Tut aber auch nicht :-( - obwohl das statement (also ohne notify) im Browser das richtige Ergebnis zurückliefert.

@Puschel: Vielen Dank. Könntest Du bitte das gesamte notify-Statement kurz posten?

Danke im voraus!

Cheers,

Otto
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: Puschel74 am 29 Dezember 2014, 19:30:57
Hallo,

Zitat@Puschel: Vielen Dank. Könntest Du bitte das gesamte notify-Statement kurz posten?
Was fehlt genau  ???

Da ich grundsätzlich nur das DEF bearbeite fehlt bei meinem notify natürlich das define n_anwesend notify
Ich hatte aber erwähnt das es ein notify ist (das Schlüsselwort ist damit gegeben) und define und <beliebiger_einmaliger_Name_in_Fhem> sollte keiner Erklärung mehr bedürfen.
Und das regexp mit dem das notify getriggert wird anwesend ist ja vorhanden - und verweist auf den Dummy.
Aber das sind ja FHEM-Grundlagen.
Oder hab ich was verpasst?

Achso - meine Codes sind grundsätzlich NICHT für die fhem.cfg gedacht da ich mich um "Sonderzeichen" nicht kümmern will.

Wenn du genau sagen kannst was du noch brauchst kann ich es dir gerne posten.

Grüße
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: pula am 29 Dezember 2014, 21:00:09
Hallo,

danke, damit funktioniert es jetzt:
define n_HeizungUmschalten notify HeizungUmschalten {\
if($EVENT eq "Wien") {\
    Log(3,"1. $EVENT");;\
  }\
  elsif($EVENT eq "Linz") {\
    Log(3,"2. $EVENT");;\
  }\
  else {\
    Log(3,"3. $EVENT");;\
  }\
}


Ich denke, das Problem lag in meiner ursprünglichen Definition des dummy:
define HeizungUmschalten dummy
attr HeizungUmschalten room Heizung
attr HeizungUmschalten setList state:Linz,Wien,UrlaubDaheim,UrlaubWeg
attr HeizungUmschalten webCmd state


jetzt (nach dem Tip von Puschel):
define HeizungUmschalten dummy
attr HeizungUmschalten room Heizung
attr HeizungUmschalten webCmd Linz:Wien:UrlaubDaheim:UrlaubWeg


Ich frage mich, ob man das trotz des webCmd auch in einem Dropdown hinbekommen würde. Aber das ist eigentlich nicht SO wichtig.

Vielen Dank noch einmal an alle für Eure Bemühungen!

Cheers,

Otto
Titel: Antw:Anfänger - Umstellen von Templist per button/Liste
Beitrag von: Puschel74 am 29 Dezember 2014, 21:12:26
Hallo,

ZitatDa ich nicht gegen die Netiquette hier verstoßen möchte, frage ich lieber: Was muß ich machen, um den Thread als gelöst zu markieren und zu schließen?
Das ist ja sehr nett von dir aber eine PN ist deshalb nicht nötig (und wird idR nicht von mir beantwortet - es sei den ich habe drum gebeten - siehe Sig).

In meinem angepinnten Beitrag hier ist eigentlich alles beschrieben.
Auch was das Gelöst betrifft und schliessen brauchst du den Beitrag nicht.
Sollte der nächster Anfänger vor seinem Post suchen wird er evtl. diesen finden und hier posten.
Ok, langsam geb ich die Hoffnung schon auf das mehr so mitdenken wie du aber gut.
Gelöste Beiträge die auch so "markiert" sind und die Lösung evtl. noch im ersten Beitrag eingearbeitet wurde bringen nur den nachfolgenden Anfängern Vorteile - und uns auf Dauer hoffentlich weniger Fragen.

Danke für deine Mithilfe beim halten wir das Forum ein kleines bischen "sauber"

Grüße