Hallo,
um sich mit fhem vertraut zu machen, habe ich mir ein paar "einfache" Aufgaben gestellt und scheitere bereits am Anfang.
Ich möchte eine Lampe mit einem Taster jeweils in den anderen Zustand schalten. Also toggle.
Bisher habe ich {UntoggleDirect("<Sensor>")} gefunden und würde dies auch gerne verwenden, bräuchte aber ein Beispiel um die Funktion besser zu verstehen.
In einer zweiten Aufgabe soll die Lampe periodisch zeitgesteuert sein. Also eine Lampe, die nach einmaligem Betätigen eines Tasters eigenständig blinkt.
Wo kann ich Beispiele finden oder ist jemand so nett mir das zu zeigen ?
Gruß wally
Ein bisschen kurz, um sowas zu beantworten. Was ist das für eine Lampe, was ist das für ein Taster? Ein "list" von beiden Geräte wäre nicht schlecht. Einige geräte unterstützen "nativ" das blinken, andere nicht
Alles dummy-devices.
Ich habe mich noch nicht für eine zukünftige hardware entscheiden können.
Bislang geht es nu darum die Programmierung von fhem zu verstehen.
Hier ist schonmal ein Blinken:
define meinDOIF DOIF ([meinDummy]) (set lampe on) (set lampe off)
attr meinDOIF do always
attr meinDOIF repeatcmd 3
attr meinDOIF wait 0,3
attr meinDOIF repeatsame 3
Wartet 3 Sekunden zwischen dem Blinken
Blinkt 3 mal
Hi,
den kleinen Kurs (https://wiki.fhem.de/wiki/Erste_Schritte_in_FHEM) kennst Du?.
Das (http://heinz-otto.blogspot.de/2017/01/ein-remote-taster-in-fhem-mit.html)hatte ich mir mal ausgedacht
ZitatAls erste Komponente stattet man einen dummy mit dem Attribute devStateIcon aus:
define testdummy dummy
attr testdummy devStateIcon _start:on:stop _stop:off:start
attr testdummy event-on-change-reading state
set testdummy _stop
Als Zweites braucht man ein notify welches nur auf die Events start und stop vom testdummy reagiert:
define nty_test notify testdummy:(start|stop) set $NAME _$EVENT
Diese Konstruktion wirkt wie ein toggle Schalter, das Symbol beim dummy ist klickbar und bei jedem Klick schaltet es sichtbar on und off.
Gruß Otto
prima, danke.
Ja, die "Erste Schritte in FHEM" Seite habe ich als erstes durchprobiert.
Ist aber wohl nur eine einzige Seite (?)
ZitatIst aber wohl nur eine einzige Seite (?)
Das ist auch empfehlenswert http://fhem.de/Heimautomatisierung-mit-fhem.pdf (ausser wenn es gesagt wird, man müsse fhem.cfg manuell editieren - das macht man nicht!)
Zitat von: wallyfhem am 11 August 2017, 12:07:48
Ist aber wohl nur eine einzige Seite (?)
Aber dafür doch ganz schön lang, also wenn ich das drucke, will er 14 Blatt Papier.
Am Ende übrigens der Link (der von amenomade) zu mehr, man muss im Wiki immer auch die Links lesen ;)
Man kann beim Dummy das Attribut useSetExtension verwenden. Dann versteht er auch toggle.
Wenn man dann noch ein setList Attribut mit on off toggle füllt klappt es super
@CoolTux
hört sich gut an, bin aber noch zu doof um Deinen Hinweis zu verstehen
Na Doku muss man natürlich als Erstes lesen -> https://fhem.de/commandref_DE.html#dummy ;)
Eigentlich steht dort alles und erklärt sich :D
Zu doof bezweifel ich, eher nicht wissend und dazu steht was in meiner Signatur.
Jedem Device kann man Attribute geben. Beim Dummy setExtension zum Beispiel welches einem die Möglichkeit eines toggle Befehls gibt. Damit Du auch eine schöne Auswahl neben dem set dummyDevice in der Detailansicht bekommst, kann man das Attribut setList mit on off toggle vergeben.
Zitatdazu steht was in meiner Signatur.
Du meinst das?
ZitatSupport me to buy new test hardware for development: https://www.paypal.me/MOldenburg
:P :D 8)
@CoolTux
Ich fürchte "zu doof" stimmt schon
Zitat von: wallyfhem am 11 August 2017, 13:13:24
@CoolTux
Ich fürchte "zu doof" stimmt schon
Zum Doku lesen? :o
@Otto123
Ja, zum verständnis der Docs, lesen selbst geht noch
Ich bekomme Dein Beispiel nicht zum Laufen. An welcher Stelle soll ich da die Lampe ansprechen ?
Wo klemmt es denn?
Ich dachte Du hast gar keine Lampe? ;)
Der dummy ist doch quasi die Lampe? Wenn Du daraus heraus etwas schalten willst packst DU das in das notify - steht doch alles in meinem Link. :o
War ich da so unverständlich ???
Ich muss noch viel mehr lesen zunächst
Ich habe gerade auf einem neuen System nochmal die Raw Definition (https://wiki.fhem.de/wiki/Import_von_Code_Snippets) aufgemacht, diese vier Zeilen per copy & paste eingeworfen:
define testdummy dummy
attr testdummy devStateIcon _start:on:stop _stop:off:start
attr testdummy event-on-change-reading state
set testdummy _stop
define nty_test notify testdummy:(start|stop) set $NAME _$EVENT
Und die Lampe geht an und aus - toggle halt.
Kann es sein das Du zu kompliziert denkst? Oder was willst Du denn genau? Die Eingangs von die zitierte Funktion habe ich da das erst mal gesehen. Noch nie gebraucht :)
@Otto123
Könnte sein, dass ich zu Kompliziertes annehme. Auch lerne ich am Besten,wenn ich Beispiele habe und die Umsetzung der Docs sehen und ausprobieren kann. Ist viel trial und error - aber so lerne ich am effizientesten. Auch versuche ich immer wieder Parallelen zum Signal/ Slot Mechanismus aus C++ zu finden. Zu allem Überfluss bin ich auch nicht sehr geduldig :)
Ich glaube die von mir Eingangs beschriebe Funktionalität wurde früher mit einem "Wischrelais"
realisiert und so ein Teil habe ich im Haus in Betrieb.
Ich muss noch ein bisschen mehr mit fhem herumspielen, um dahinter zu kommen.
Docs lesen natürlich auch :)
Das Verständnisproblem lag daran, dass Du in Deinem code gar keine lampe hast.
Da ist 'testdummy' als Ereignissender und das notify 'nty_test_notify' als Ereignisauswertung.
Ich habe hier noch eine 'define lamp1 dummy' als Empfänger.
Ich kenne den Signal/ Slot Mechanismus aus C++ nicht. :-[
Aber tue das vielleicht nicht. FHEM ist keine Programmiersprache, FHEM ist eher eine konfigurierbare Maschine. Irgendwas erzeugt events - du definierst eine Regel - FHEM setzt einen neuen Zustand, oder schreibt mit ...
Ich kriege das schon hin, wenn erstmal der Einstieg geschafft ist.
Zitat von: Otto123 am 11 August 2017, 14:09:21
Ich kenne den Signal/ Slot Mechanismus aus C++ nicht. :-[
https://de.wikipedia.org/wiki/Signal-Slot-Konzept
Zitat von: Otto123 am 11 August 2017, 14:09:21
Aber tue das vielleicht nicht. FHEM ist weniger Programmiersprache, FHEM ist eher eine konfigurierbare Maschine. Irgendwas erzeugt events - du definierst eine Regel - FHEM setzt einen neuen Zustand, oder schreibt mit ...
und das alles zu verstehen ist am anfang gar nicht so einfach. und ich glaube man lernt nie aus bei/mit/dank fhem :)
Zitat von: nils_ am 11 August 2017, 14:17:03
und das alles zu verstehen ist am anfang gar nicht so einfach.
Mein größtes Problem war, dass FHEM sichtbar nur "leer" war. Nach meinem ersten define ging es mir besser ;D aber es war irgendwie eine Überwindung
Gibt es eigentlich Bemühungen das Editieren der fhem.cfg von der Kommandozeilenebene um einen Graphikeditor ähnlich Labview oder Qucs etc. zu erweitern ?
Ih mag die Kommandozeile eigentlich gern, dennoch, ganz zeitgemäss ist auch nicht mehr.
Also genau das sollst Du ja nicht machen.
Du kannst alles im Webinterface von FHEM machen.
Einfach oben in der eingabezeile den define Befehl rein schreiben und schon hast du ein Device angelegt. Das neue Device steht meist unter unsorted drin und wenn du auf den Namen des Devices klickst bekommst du die Detailansicht. Dort kann man dann attribute hinzufügen. Group, room oder oder
Zitat von: Otto123 am 11 August 2017, 13:34:56
Ich habe gerade auf einem neuen System nochmal die Raw Definition (https://wiki.fhem.de/wiki/Import_von_Code_Snippets) aufgemacht, diese vier Zeilen per copy & paste eingeworfen:
Und meine Links lesen! Die "große" Kommandozeile.
Editieren tut FHEM die cfg alleine.
Und die Oberfläche kennt jede Menge "Editor Hilfe" -> list z.B. mit Filtern die Suchmaschine der cfg. delete zum löschen und und und
Alles gepaart mit der Power von regEx (und Perl)
Wo stand jetzt eigentlich, dass man die fhem.cfg editieren muss? :'(
Wie Otto schon geschrieben hat, hat FHEM eigene Befehle welche man oben in die Kommandozeile von FHEMWEB eingeben kann.
define
delete
deletereading
list
Und so weiter. Damit kann man ohne irgendwelche Konfigfiles zu bearbeiten FHEM Administrieren.
Grüße
Wo könnte ich z.B. eine klare Erläuterung folgender Zeile nachlesen:
attr testdummy devStateIcon _start:on:stop _stop:off:start
Was bedeuten die Parameter von devStateIcon a1:b1:c1 a2:b2:c2
Ich bitte nicht um eine Erläuterung hier, nur wo ich sowas finden kann, auch zukünftig mit anderen Attributen.
Oder hier:
ZitatAuf dem Remote System wird ein Script im Home Verzeichnis des verwendeten Remote Benutzers erzeugt/abgelegt und mit chmod +x test.sh ausführbar gemacht:
Soll das script bei Verwendung eines RaspberyPi in /home/pi/ oder in /opt/fhem/ abgelegt werden ?
immer in der doku
https://fhem.de/commandref_DE.html#devStateIcon
Home Verzeichnis des verwendeten Remote Benutzers -> hängt also vom Benutzer ab
Woher ist das Zitat? Ach ja aus meinem Artikel ;)
Aber die Antwort bleibt, wenn man den Remotebenutzer Pi nimmt (Beispiel) dann dort in /home/pi
Das ist doch in meinem Artikel nicht vorgeschrieben, das Remotesystem kann auch einen Benutzer Willi haben.
Jo, jetzt hab' ich's auch gefunden :) thx
@ Otto123:
wenn ich zu sehr nerve bitte kurzen Hinweis :)
Abgeleitet von Deinem toggle-code:
define Taster dummy
attr Taster devStateIcon on:on:off off:off:on
attr Taster event-on-change-reading state
define n_Taster notify Taster:(on|off) set $NAME _$EVENT
Der obige code funktioniert nur wenn ich die 2. Zeile so ändere:
define Taster dummy
attr Taster devStateIcon _on:on:off _off:off:on
attr Taster event-on-change-reading state
define n_Taster notify Taster:(on|off) set $NAME _$EVENT
Hat der führende Unterstrich eine spezielle Bedeutung ?
Das erste ist der STATE
on
Das zweite ist das Icon passend zum Zustand
on:black_Steckdose.on
Das dritte ist der Zustand wo er hinschalten soll wenn er den Zustand des ersten Parameters angenommen hat und man noch mal auf das Icon drückt
on:black_Steckdose.on:off
Und nun das ganze noch mal für off
off:black_Steckdose.off:on
Ergibt in einer Zeile
attr Taster devStateIcon on:black_Steckdose.on:off off:black_Steckdose.off:on
Fertig ist ein Dummy der eine Steckdose darstellt
@CoolTux:
vielen Dank, aber das ist eigentlich klar geworden in der Beschreibung.
Meine Frage beog sich auf den notwendigen Unterstrich in "_on" und "_off"
Ohne diese Unterscheidung lauft Otto123's code nicht.
Ja :)
er verhindert eine Endlosschleife! Der Befehl im notify setzt ja auch nicht on oder off ($EVENT) sondern _on _off (_$EVENT)
Da das notify selbst auf on|off reagiert wurde das Ganze nach dem ersten schalten nur "noch viel Strom verbrauchen"
Aber _ könnte auch willi oder irgendetwas anderes sein, es ist einfach nur: _on ne on
Dabei ist die Eigenschaft von devStateIcon wichtig -> Auflistung von regexp:icon-name:cmd
ZitatWenn der Zustand des Gerätes mit der regexp übereinstimmt, wird als icon-name das entsprechende Status Icon angezeigt, und (falls definiert), löst ein Klick auf das Icon das entsprechende cmd aus.
Zitat von: Otto123 am 11 August 2017, 15:28:31
Wo stand jetzt eigentlich, dass man die fhem.cfg editieren muss? :'(
das editieren der fhem.cfg wird im einsteiger-pdf beschrieben bzw. an mehreren stellen "benutzt". (ob das jetzt explizit "müssen" steht, möchte ich nicht behaupten ;) )
Muss man nicht (mehr) sollte man nicht (mehr)!!!
@Otto123
Habe ein wenig rumgespielt und folgenden code probiert:
#
define Taster dummy
attr Taster devStateIcon on:radio_checked:off off:radio_checked:on
attr Taster event-on-change-reading state
define n_Taster notify Taster:(on|off) set Lamp $EVENT
define Lamp dummy
Zitat von: Otto123 am 11 August 2017, 16:46:51
er verhindert eine Endlosschleife! Der Befehl im notify setzt ja auch nicht on oder off ($EVENT) sondern _on _off (_$EVENT)
Da das notify selbst auf on|off reagiert wurde das Ganze nach dem ersten schalten nur "noch viel Strom verbrauchen"
Woran kann ich sehen ob der Prozess in einer Endlosschleife gelandet ist oder viel Strom verbraucht ?
Ein Hinweis darauf ist vielleicht, dass sich der Timestamp beim betätigen des Tasters zwar ändert, die Änderung aber nicht sofort anzeigt.
Einen Taster konnte ich in den Symbolen nicht finden, deshalb zweimal "radio_checked"
Gibt es vielleicht dennoch einen Taster ?
Betreffs Hardware:
Ich würde gerne ein Starterkit Hardware kaufen. Vielleicht einen Temperatursensor und/oder eine schaltbare Steckdoe. Könnt Ihr da was empfehlen ?
Frag in unserem Marktplatz, haben bestimmt noch eine Menge was im Keller (ja ich auch ;-)
Gruß Arnd
Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
@RaspiLED:
Prima Tipp, danke !
Zitat von: wallyfhem am 14 August 2017, 10:15:14
Woran kann ich sehen ob der Prozess in einer Endlosschleife gelandet ist oder viel Strom verbraucht ?
Hi,
Das mit dem Strom war sehr symbolisch gemeint, weil eine zu 100 % belastete CPU eben mehr Strom braucht. Der Code in Deinem letzten Beispiel läuft doch aber einwandfrei!? Hab es gerade getestet. Du schaltest ja damit ein anderes Device.
Generell kannst Du die CPU Auslastung und Prozesse prüfen z.B. unter Linux mit "top"
Gruß Otto
Ja, läuft prima - beginnt langsam Spass zu machen.
Um es noch interessanter zu machen, möchte ich jetzt erstmal noch ein bisschen Hardware besorgen.
Gruß Wally
Bis dahin kannst du mit Dummys üben. Du kannst mit Notify auf bestimmte Zustande von Dummys triggern und somit andere Dummys schalten. Du kannst Dummys mit Readings befüllen und somit RegEx beim Notify oder watchdog üben.
Nur so als Tip, dann macht es mit echter Hardware gleich von Anfang richtig Spaß.
Und lesen lesen lesen, auch hier im Forum einfach mal die aktuellen Beiträge mit verfolgen.
Grüße