Neuer FHEM User benötig Hilfe bei Scripts/Macros

1,583 views
Skip to first unread message

Mitch

unread,
Jan 28, 2012, 3:21:58 PM1/28/12
to FHEM users
Hallo Zusammen,

seit gestern habe ich auch FHEM laufen *freu*

Ich hatte schon länger FHT Heizungsmodule mit einer FHZ1000 Basis
laufen. Hatte auch noch die FHZ1000 PC, aber nie benutzt.
Nun habe ich gestern durch Zufall FHEM wieder gefunden und
festgestellt, dass dies nun auf der FritzBox ohne Freetz läuft.
Also gleich installiert und die FHT80b's angebunden. Hat alles super
funktioniert.

Das Webinterface auf der Fritzbox ist schon etwas einfach, reicht mir
aber bis auf zwei kleine Dinge und das genau ist mein Problem bzw.
Frage an die Profis:

Ich hätte gerne zwei bis vier Buttos/Links/etc. auf der Seite, die
einen kleinen Script (ganz einfahce Befehle) ausführrt.
Explizit möchte ich folgendes:
Alle Heizungen aus
Alle Heizungen an
Kinderzimmer an
Alle Lichter aus (werde in Zukunft noch FS20 Adapter hinzufügen)

Wie so ein Script grundätzlich aussieht, habe ich gefunden:
set FHT_xxxx desired-temp 14.0
set FHT_xxxx desired-temp 14.0
set FHT_xxxx desired-temp 14.0
usw.

Aber wie und wo muss ich das speicher, wie kann ich das aufrufen bzw.
wie bekommen cih das auf die Weboberfläche?

Vielen Dank im voraus für eure Hilfe!!

Rudolf Koenig

unread,
Jan 28, 2012, 4:06:39 PM1/28/12
to fhem-...@googlegroups.com
> Explizit m�chte ich folgendes:
> Alle Lichter aus

Man hat mehrere Moeglichkeiten. Folgendes faellt mir ein:

- die FS20 Funktionalitaet nutzen (funktionsgruppen / global master), und ein
fhem Geraet definieren (siehe commandref.html#FS20), der alle ausloest.
Diesen Code koennte man auch direkt auf einem FS20 Sender anlernen.

define alleLichter FS20 1234 FF

(wichtig ist hier FF fuer global master).

- Dummy device oder "leeres" FS20 device definieren, und ein notify zu diesem
definieren, der dann alles einzeln erledigt. Beim dummy braucht man ein
eventMap fuer das web frontend, beim FS20 nicht.

define alleLichter dummy
attr alleLichter eventMap on:on off:off
notify alleLichterNtfy notify alleLichter set dev1,dev2,dev3 %

Siehe auch commandref.html#devspec

Wenn weitere Bedingungen (wie Zeitpunkt oder Anweisenheitschalter) dazukommen,
dann muss man das als perl "Einzeiler" schreiben:
notify alleLichterNtfy notify alleLichter {\
fhem("set dev1,dev2,dev3 %");;\
}
oder als Shellscript:
notify alleLichterNtfy notify alleLichter "allesSchalten %"
...
#!/bin/sh
perl fhem.pl localhost:7072 "set dev1,dev2,dev3 $1"


> Alle Heizungen aus

notify alleHZntfy notify alleHeizungen set TYPE=FHT desired-temp 14

borsti

unread,
Jan 28, 2012, 4:11:34 PM1/28/12
to fhem-...@googlegroups.com
> notify alleHZntfy notify alleHeizungen set TYPE=FHT desired-temp 14
>
müsste das nicht (in allen diesen Beispielen) "define alle..." heissen?

Gruss
Torsten

Rudolf Koenig

unread,
Jan 28, 2012, 4:13:10 PM1/28/12
to fhem-...@googlegroups.com
On Sat, Jan 28, 2012 at 10:11:34PM +0100, borsti wrote:
> > notify alleHZntfy notify alleHeizungen set TYPE=FHT desired-temp 14
> >
> m�sste das nicht (in allen diesen Beispielen) "define alle..." heissen?

Sorry, hast natuerlich Recht.

Mitch

unread,
Jan 28, 2012, 4:23:23 PM1/28/12
to FHEM users
ok, danke sowiet.
Habe ich halbwegs verstanden ;-)

Aber wie bekomme ich jetzt das: notify alleHZntfy notify alleHeizungen
set TYPE=FHT desired-temp 14
auf die Webseite als Link/Butoon?

Zrrronggg!

unread,
Jan 28, 2012, 6:45:36 PM1/28/12
to FHEM users
Gar nicht. Auf der Webseite ist nur der dummy zu sehen. Wenn du den
schaltest, dann wird das "define lalala" ausgelöst.

Hier ein Beispiel aus meiner Installation. Alles in fhem.cfg
eintragen. Ich verwende leere FS20 devices, hier "Regler_aus". Da das
FS20 device eine Adresse haben muss, kann man die zusätzlich prima auf
eine Fernbedienung anlernen und so das Ganze auch ohne Weboberfläche
schalten:

define Regler_aus FS20 11114222 d2
attr Regler_aus dummy 1
attr Regler_aus room MAKROS

Das erzeugt im Raum MAKROS auf der Weboberfläche einen Schalter, der
Regler_aus heisst.

Dann ebenfalls in die fhem.cfg:

define act_on_Regler_aus notify Regler_aus { if ("%" ne "off")
{ fhem("set hzg.* desired-temp 8.0 ;; set zk_pumpe off ;; define
Regler_aus_off at +00:30:00 set Regler_aus off") } }


wenn du nun auf der WEboberfläche den schalter Regler_aus betätigst
wird alles gemacht, was in "define act_on_Regler_aus..." passiert.

Ich habe noch eine abfrage eingebaut, die nur dann auch die ganzen
FHTs auf 8 Grad setzen, wenn der Schalter auf der Weboberfläche auf ON
- oder vielmehr NICHT auf OFF ("%" ne "off") - gesetzt wird. Die
Zirkulationspumpe mache ich auch noch aus. Der Rest dannach dient nur
dazu, den Dummy FS20 Schalter nach 30 Minuten von alleine wieder auf
OFF zu stellen, braucht man nicht unbedingt.

Betätigen des Schalters am Webfrontend löst nun die Aktion aus. Und
wenn man eine Fernbedienung auf die Adresse
11114222 d2
anlernt, kann man mit der das Ganze auch schalten.

UdoS

unread,
Jan 29, 2012, 1:25:19 AM1/29/12
to FHEM users
Hallo Zrrronggg!, Hallo Rudolf,

Das ist ja mal ne richtig ausführliche Erklärung (für Dummies wie
mich ;-) )

Wenn ich das richtig verstehe müsste "Set hzg.*" in der config von
Mitch "Set FHT_*" lauten.
Die FHTs bleiben jetzt aber nur auf 8 Grad bis zum nächsten, im FHT
programmierten Schaltpunkt, oder steuerst du diese vollständig über
FHEM?
Gibt es eine Möglichkeit die FHTs mit einem Schalter in FHEM zurück
auf "Auto" (Schaltprogramm im FHT) zu setzen?

Danke und Beste Grüsse

Udo

Mitch

unread,
Jan 29, 2012, 4:31:36 AM1/29/12
to FHEM users
genau so stell ich mir das vor.
Aber ich bin (noch) nicht so fit, genau zu begreifen, was die
einzelnen Befehle machen.

Meine FHT80b haben alle einen Namen (Raum), Alias (Raum) und den Raum
selber definiert.

Ich habe jetzt mal Deinen "Script" übernommen und bearbeitet (hoffe
das ist okay?)

define Heizung_aus FS20 11114222 d2
attr Heizung_aus dummy 1
attr Heizung_aus room Heizung

define act_on_Heizung_aus notify Heizung_aus { if ("%" ne "off")
{ fhem("set FHT_* desired-temp 14.0 ;; set zk_pumpe off ;; define
Heizung_aus_off at +00:30:00 set Heizung_aus off") } }

Wenn ich alles richtig verstanden habe, dann
definiere ich erstmal ein dummy FS20 mit Name Heizung_aus
dann schicke ich bim klicken an alle Regler 14 Grad und an die Pumpe
aus. Zusätzlich wird um halb eins der Schater auf off gestellt.

Hab ich das soweit verstanden?

Danke!

On 29 Jan., 00:45, "Zrrronggg!" <blunzmanj...@tekkno.de> wrote:

Mitch

unread,
Jan 29, 2012, 4:34:01 AM1/29/12
to FHEM users
leider geht es nicht :-(

Der Log gibt folgendes aus:

2012.01.29 10:29:42 3: act_on_Heizung_aus return value: Unknown
command {, try help
2012.01.29 10:29:51 2: FS20 set Heizung_aus off
2012.01.29 10:29:51 3: act_on_Heizung_aus return value: Unknown
command {, try help
Message has been deleted

Mitch

unread,
Jan 29, 2012, 5:24:55 AM1/29/12
to FHEM users
So, war ein Fehler in der Formatierung (hatte Returns im Script).

Jetzt geht es!! Habe mir auch gleich noch einen Makro gemacht.

Tausend Dank (erstmal :-))

Holger

unread,
Jan 29, 2012, 5:47:00 AM1/29/12
to FHEM users
Hallo Mitch,

ich habe ein ähnliches Thema über Dummyschalter gelöst (siehe
folgenden Thread)
http://groups.google.com/group/fhem-users/browse_thread/thread/b561b4f7c8e48035#

FHEM Wiki Eintrag ist in der Mache, aber ich bin noch bei der
Optimierung.
--> Aufgrund der limitierten Anzahl von FHEM Befehlen, die
sinnvollerweise unmittelbar nacheinander verschickt werden, will ich
noch die Prüfung einfügen, ob die Werte bereits korrekt gesetzt sind,
bevor ich neue day-Temp, ... übertrage.

Sobald meine Script entsprechend funktioniert kommt es in die Wiki.

Gruss

Holger

Zrrronggg!

unread,
Jan 29, 2012, 10:29:16 AM1/29/12
to FHEM users
Ein kleines Problem sehe ich noch in Mitchs script:

set FHT_*

Das dürfe eigentlich gar nicht gehen.

set FHT_.* hingegen sollte gehen.

der * ist nicht die übliche Wildcard, mit der Bedeutung "egal was hier
steht", sondern Bestandteil eine Regular Expression ".*" die bedeutet:

. = beliebige Zeichen
* = und zwar beliebig oft

Nur beides zusammen fängt tatsächlich beliebige Zeichenketten ab.

Siehe auch hier.
http://de.autohotkey.com/docs/misc/RegEx-QuickRef.htm




On 29 Jan., 11:47, Holger <holger.schligtenho...@googlemail.com>
wrote:
> Hallo Mitch,
>
> ich habe ein ähnliches Thema über Dummyschalter gelöst (siehe
> folgenden Thread)http://groups.google.com/group/fhem-users/browse_thread/thread/b561b4...

Zrrronggg!

unread,
Jan 29, 2012, 10:32:44 AM1/29/12
to FHEM users
noch was:

+00:30:00

bedeutet IN 30 Minuten.

*00:30:00 würde um halb eins bedeuten.

Und na klar darfst du verwenden und verändern was hier gepostet wird.

On 29 Jan., 11:47, Holger <holger.schligtenho...@googlemail.com>
wrote:
> Hallo Mitch,
>
> ich habe ein ähnliches Thema über Dummyschalter gelöst (siehe
> folgenden Thread)http://groups.google.com/group/fhem-users/browse_thread/thread/b561b4...

Zrrronggg!

unread,
Jan 29, 2012, 10:43:02 AM1/29/12
to FHEM users

> Wenn ich das richtig verstehe müsste "Set hzg.*" in der config von
> Mitch "Set FHT_*" lauten.

Nein, sieh oben. Es müsste vielmehr FHT_.* oder auch FHT.* heissen.

> Die FHTs bleiben jetzt aber nur auf 8 Grad bis zum nächsten, im FHT
> programmierten Schaltpunkt, oder steuerst du diese vollständig über
> FHEM?

Das ist richtig, bei mir aber meist erwünscht. Ich setzt die FHT
Schaltpunkte als quasi "Notfallprgoramm" ein, die auch dann noch die
Heizung des Raumes rudimentät steuern, wenn FHEM mal ausfallen sollte
(ist mir noch nicht vorgekommen) oder Funksignale nicht empfangen
werden (das IST vorgekommen).
Einige FHTs (das selten benutze Gaestezimmer z.b.) stehen im manual
mode und werden nur von FHEM gesteuert.


> Gibt es eine Möglichkeit die FHTs mit einem Schalter in FHEM zurück
> auf "Auto" (Schaltprogramm im FHT) zu setzen?

Dadurch das man set desired-temp xy sendet geht das FHT nicht in
manual mode. Man brauch es nicht zurücksetzen.

Generell kann man den Mode setzen mit set FHT xy mode manual , set
FHT xy mode auto

Mitch

unread,
Jan 29, 2012, 1:32:46 PM1/29/12
to FHEM users
Vielen Dank euch allen, habe schon viel dazu gelernt und auch meinen
Script etwas verbessert.
Habe mir gerade im Wiki ein paar Codes angeschaut und bin nun voller
neuen Ideen :-)

Sicher werde ich dadurch auch noch viele Frage haben ;-)

Mitch

unread,
Jan 30, 2012, 7:27:06 AM1/30/12
to FHEM users
So und schon habe ich das nächste Problem:

Ich habe mir nun ein paar Macros/Scripts erstellt.
u.a. einen für Sommer nd Winter
Der Sommer soll alle FHT80b auf Manuell und 8 Grad einstellen, der
Winter auf Auto und 21.5 Grad.

Leider geht es nicht, von (im Moment) vier FHT80b hat nur einer
reagiert. Der Log zeigt keine Fehler.
Kann es sein, dass die FHZ 1300 PC nicht so viele Befehle verschicken
kann?

Hier mal mein Script:
define Sommer FS20 11112222 d2
attr Sommer dummy 4
attr Sommer fm_order 4
attr Sommer room Makros

define act_on_Sommer notify Sommer { if ("%" ne "off"){ fhem("set
FHT_.* mode manual ;; set FHT_.* desired-temp 8.0 ;; define Sommer_off
at +00:30:00 set Sommer off") } }

define Winter FS20 11113333 d2
attr Winter dummy 5
attr Winter fm_order 5
attr Winter room Makros

define act_on_Winter notify Winter { if ("%" ne "off"){ fhem("set
FHT_.* mode auto ;; set FHT_.* desired-temp 21.5 ;; define Winter_off
at +00:30:00 set Winter off") } }

und hier der Log:
2012.01.30 13:10:59 2: FS20 set Sommer on
2012.01.30 13:10:59 2: FHT set FHT_1526 mode manual
2012.01.30 13:10:59 2: FHT set FHT_253c mode manual
2012.01.30 13:10:59 2: FHT set FHT_2a2e mode manual
2012.01.30 13:10:59 2: FHT set FHT_4a46 mode manual
2012.01.30 13:10:59 2: FHT set FHT_5133 mode manual
2012.01.30 13:11:00 2: FHT set FHT_563c mode manual
2012.01.30 13:11:00 2: FHT set FHT_5b42 mode manual
2012.01.30 13:11:00 2: FHT set FHT_1526 desired-temp 8.0
2012.01.30 13:11:00 2: FHT set FHT_253c desired-temp 8.0
2012.01.30 13:11:00 2: FHT set FHT_2a2e desired-temp 8.0
2012.01.30 13:11:00 2: FHT set FHT_4a46 desired-temp 8.0
2012.01.30 13:11:00 2: FHT set FHT_5133 desired-temp 8.0
2012.01.30 13:11:00 2: FHT set FHT_563c desired-temp 8.0
2012.01.30 13:11:00 2: FHT set FHT_5b42 desired-temp 8.0

Kann man die Befehle öfter verschicken lassen?
Hab da etwas von einen attr retrycount gesehen, das steht auf 3

Vielen Dank!
Markus

Zrrronggg!

unread,
Jan 31, 2012, 4:18:35 PM1/31/12
to FHEM users

>
> Leider geht es nicht, von (im Moment) vier FHT80b hat nur einer
> reagiert. Der Log zeigt keine Fehler.
> Kann es sein, dass die FHZ 1300 PC nicht so viele Befehle verschicken
> kann?

Der Befehlsspeicher vom FHZ1300PC ist eher klein, 40 Byte wenn ich
mich recht erinnere, das wären dann ca. 8 Befehle. Das kann also schon
sein, dass der Befehle verschluckt, scheint mir sogar wahrscheinlich.
Allerdings sollten dann EOB (End of Buffer) Meldungen im log
erscheinen.

(Oder kommt die nur bei CULs, weil die eigentlich von culfw erzeugt
wird? Ich weiss es nicht. Kann gut sein, das FHZ1300PC keinen LOVF und
EOB Meldungen abgibt, da bin ich aber unsicher, ich habe keine
FHZ1300)

Du könntest den Softbuffer einschalten, um das Problem zu lösen.
(siehe commandref)

Softbuffer schafft softwareseitig in FHEM einen zusätzlichen Buffer.
Nachteil ist, das die Abarbeitung des Inhaltes sehr lange dauern kann,
also kommandos erst ne stunde später oder so ausgeführt werden. Aber
einen versuch ists wert.



> define act_on_Sommer notify Sommer { if ("%" ne "off"){ fhem("set
> FHT_.* mode manual ;; set FHT_.* desired-temp 8.0 ;; define Sommer_off
> at +00:30:00 set Sommer off") } }


und
>
> define act_on_Winter notify Winter { if ("%" ne "off"){ fhem("set
> FHT_.* mode auto ;; set FHT_.* desired-temp 21.5 ;; define Winter_off
> at +00:30:00 set Winter off") } }

Das erzeugt in der Tat ordentlich Funklast. Sollte an sich gerade noch
gehen, aber wenn man gerade Sachen ausprobiert, wenn man etwas
einrichtet und also damit rumspielt, könntest du in DutyCycle Probleme
laufen, d.h. die maximale Sendedauer überschreiten. Ich würde aus dem
Bauch raus sagen, das wenn du jedes der Scripte 1x innherhalb einer
Stunde ausführen lässt, du bereits an der Grenze der 1% bist.

Siehe Wiki z.b.
http://fhemwiki.de/wiki/Maximal_nutzbare_Geräte
http://fhemwiki.de/wiki/1%25_Regel


Warte mal ne Stunde und versuche es dann noch mal.


> 2012.01.30 13:10:59 2: FS20 set Sommer on
> 2012.01.30 13:10:59 2: FHT set FHT_1526 mode manual
> 2012.01.30 13:10:59 2: FHT set FHT_253c mode manual
> 2012.01.30 13:10:59 2: FHT set FHT_2a2e mode manual
> 2012.01.30 13:10:59 2: FHT set FHT_4a46 mode manual
> 2012.01.30 13:10:59 2: FHT set FHT_5133 mode manual
> 2012.01.30 13:11:00 2: FHT set FHT_563c mode manual
> 2012.01.30 13:11:00 2: FHT set FHT_5b42 mode manual
> 2012.01.30 13:11:00 2: FHT set FHT_1526 desired-temp 8.0
> 2012.01.30 13:11:00 2: FHT set FHT_253c desired-temp 8.0
> 2012.01.30 13:11:00 2: FHT set FHT_2a2e desired-temp 8.0
> 2012.01.30 13:11:00 2: FHT set FHT_4a46 desired-temp 8.0
> 2012.01.30 13:11:00 2: FHT set FHT_5133 desired-temp 8.0
> 2012.01.30 13:11:00 2: FHT set FHT_563c desired-temp 8.0
> 2012.01.30 13:11:00 2: FHT set FHT_5b42 desired-temp 8.0

naja, das log sagt nur, was FHEM an die Zentrale übergeben hat.
Ob die das auch senden konnte sieht man nicht. Mit CUL und CUNO könnte
man
sehen, ob die Befehle auch tatsächlich gesendet wurden, indem man die
Dinger abfragt,
aber die FHZ1300PC kann das nicht, soweit ich weiss.



> Kann man die Befehle öfter verschicken lassen?

Kann man. Aber wenn die Sendelast dein Problem ist, würde das die
Situation nicht verbessern.

> Hab da etwas von einen attr retrycount gesehen, das steht auf 3

Soweit ich weiss hat recount nur dann eine Bedeutung, wenn der
softbuffer eingeschaltet ist.

Und wieso 4 FHTs? Ich sehe da acht Adressen. Kommunikationsversuche
mit FHTs die eingerichtet aber nicht vorhanden sind verbraten auch
Sendezeit!
Reply all
Reply to author
Forward
0 new messages