FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: wallyfhem am 11 August 2017, 11:42:04

Titel: [GELÖST] toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 11:42:04
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
Titel: Antw:toggle lamp
Beitrag von: amenomade am 11 August 2017, 11:48:21
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
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 11:51:54
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.
Titel: Antw:toggle lamp
Beitrag von: gloob am 11 August 2017, 11:56:45
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
Titel: Antw:toggle lamp
Beitrag von: Otto123 am 11 August 2017, 12:00:32
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
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 12:07:48
prima, danke.

Ja, die "Erste Schritte in FHEM" Seite habe ich als erstes durchprobiert.
Ist aber wohl nur eine einzige Seite (?)

Titel: Antw:toggle lamp
Beitrag von: amenomade am 11 August 2017, 12:11:13
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!)
Titel: Antw:toggle lamp
Beitrag von: Otto123 am 11 August 2017, 12:20:27
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  ;)
Titel: Antw:toggle lamp
Beitrag von: CoolTux am 11 August 2017, 12:24:01
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
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 12:37:06
@CoolTux

hört sich gut an, bin aber noch zu doof um Deinen Hinweis zu verstehen
Titel: Antw:toggle lamp
Beitrag von: Otto123 am 11 August 2017, 12:44:49
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
Titel: Antw:toggle lamp
Beitrag von: CoolTux am 11 August 2017, 12:45:49
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.
Titel: Antw:toggle lamp
Beitrag von: amenomade am 11 August 2017, 12:56:26
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)
Titel: Antw:toggle lamp
Beitrag von: CoolTux am 11 August 2017, 13:02:15
Zitat von: amenomade am 11 August 2017, 12:56:26
Du meinst das?   :P :D 8)

Ja das auch. Hihi
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 13:13:24
@CoolTux

Ich fürchte "zu doof" stimmt schon

Titel: Antw:toggle lamp
Beitrag von: Otto123 am 11 August 2017, 13:18:30
Zitat von: wallyfhem am 11 August 2017, 13:13:24
@CoolTux

Ich fürchte "zu doof" stimmt schon
Zum Doku lesen?  :o
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 13:22:43
@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 ?

Titel: Antw:toggle lamp
Beitrag von: CoolTux am 11 August 2017, 13:27:00
Wo klemmt es denn?
Titel: Antw:toggle lamp
Beitrag von: Otto123 am 11 August 2017, 13:27:31
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  ???
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 13:30:30
Ich muss noch viel mehr lesen zunächst
Titel: Antw:toggle lamp
Beitrag 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:
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 :)
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 13:57:50
@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.
 
Titel: Antw:toggle lamp
Beitrag von: Otto123 am 11 August 2017, 14:09:21
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 ...
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 14:11:35
Ich kriege das schon hin, wenn erstmal der Einstieg geschafft ist.

Titel: Antw:toggle lamp
Beitrag von: nils_ am 11 August 2017, 14:17:03
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 :)
Titel: Antw:toggle lamp
Beitrag von: Otto123 am 11 August 2017, 14:20:50
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
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 14:28:37
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.
 
Titel: Antw:toggle lamp
Beitrag von: CoolTux am 11 August 2017, 15:12:13
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
Titel: Antw:toggle lamp
Beitrag von: Otto123 am 11 August 2017, 15:28:31
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?  :'(
Titel: Antw:toggle lamp
Beitrag von: CoolTux am 11 August 2017, 15:35:57
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
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 15:44:45
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 ?





Titel: Antw:toggle lamp
Beitrag von: Otto123 am 11 August 2017, 15:48:50
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.
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 15:51:10
Jo, jetzt hab' ich's auch gefunden :) thx
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 16:17:22
@ 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 ?


 

Titel: Antw:toggle lamp
Beitrag von: CoolTux am 11 August 2017, 16:42:06
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
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 11 August 2017, 16:46:22
@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. 
Titel: Antw:toggle lamp
Beitrag von: Otto123 am 11 August 2017, 16:46:51
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.
Titel: Antw:toggle lamp
Beitrag von: nils_ am 14 August 2017, 09:28:13
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 ;) )
Titel: Antw:toggle lamp
Beitrag von: CoolTux am 14 August 2017, 09:45:31
Muss man nicht (mehr) sollte man nicht (mehr)!!!
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 14 August 2017, 10:15:14
@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 ?


Titel: Antw:toggle lamp
Beitrag von: RaspiLED am 14 August 2017, 19:40:56
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, ...
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 14 August 2017, 19:46:11
@RaspiLED:

Prima Tipp, danke !
Titel: Antw:toggle lamp
Beitrag von: Otto123 am 14 August 2017, 21:24:39
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
Titel: Antw:toggle lamp
Beitrag von: wallyfhem am 15 August 2017, 12:08:06
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
Titel: Antw:toggle lamp
Beitrag von: CoolTux am 15 August 2017, 12:19:19
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