Schönen guten Abend allerseits.
Ich versuche gerade in das Thema FHEM einzutauchen und habe als erstes Projekt eine simple Steuerung von Relais vor.
Die Relais sind über die serielle Schnittstelle an einem Debian Linux Server angeschlossen. Diese Relais können über ein einfaches Programm gesteuert werden. Über die Commandline funktioniert das ohne Probleme.
In FHEM habe ich folgendes Gerät angelegt:
NAME | relaisstecker1 |
NR | 51 |
STATE | on |
TYPE | DUMMY |
mit den Atributen
devStateIcon | on:black_Steckdose.on off:black_Steckdose.off |
event-on-update-reading | trigger relais1_toggle |
icon | it_remote_folder |
setList | on off |
Im Webfrontend kann ich die beiden Stati (on|off) schalten.
Es wird aber nicht der Trigger relais1_toggle ausgeführt.
Der Trigger relais1_toggle, über die Befehlszeile auf der FHEM Webseite ausgeführt, bringt das erwartete Ergebnis und schaltet das Relais.
Was muss ich machen, dass ich das Relais über die Weboberfläche bzw Zeitgesteuert mit FHEM steuern kann?
Vielen Dank für eure Hilfen.
Peter Nemez
event-on-update ist nicht das was du suchst. damit erzeugst du keine trigger sondern spät dafür das ein device beim update bestimmter
readings events triggert.
was du möchtest ist ein notify.
ansonsten muss du vermutlich aufpassen weil niemand verhindert das z.b. zwei mal on geschtaltet werden kann und dann sein toggle durcheinander kommt wenn du nicht aufpasst.
je nach dem wie sein relais genau angesteuert wird ist eventuell ECMD etwas für dich.
gruss
andre
Hallo Andre,
Danke für deine Antwort aber irgendwie komm ich nicht weiter.
Ich habe es jetzt mit ECMD versucht. Irgendwie schaffe ichs aber nicht das lokale Programm relais.bin anzusprechen. Relais.bin ist der Treiber für die Relaiskarte, dem möchte ich einige Parameter übergeben.
Mt ECMD kann ich zwar die serielle Schnittstelle öffnen, aber nicht den bereits vorhanden Treiber ansprechen.
Wie kann ich debuggen welches Komando tatsächlich wohin übergeben wird?
Wie spreche ich den Treiber an?
Danke für jeden Input.
Peter
ECMD ist nur dann richtig wenn du direkt die serielle schnittstelle ansprechen willst.
was meinst du mit treiber?
ein externes programm kannst du mit system() oder qx aufrufen. du findest beispiele wenn du hier im forum danach suchst.
gruss
andre
Danke für deine Hinweise, aber ich komme nicht viel weiter :-\
Daher noch mal zurück zum Start:
Was will ich machen?
Ich will die Gartenbewässerung Steuern. Vorerst zwei Funktionen:
1) Automatisch: zu bestimmten Zeiten soll die Beregnungsanlage die Pumpe des Brunnens einschalten und das dazugehörigen Ventil. Da ich einen Bereich der Wiese habe, der im Regenschatten des Hauses liegt, muss das von Beginn bis zum Ende der Saison regelmäßig gemacht werden.
2) Fernbedienung der Anlage: über das Smartphone bzw. die Weboberfläche will ich die Pumpe einschalten und gegebenenfalls die Ventile für die Versenkregner. Beim abdrehen der Ventile soll der Status abgefragt werden, wenn kein Ventil mehr offen ist, auch die Pumpe Abschalten. Die Pumpe hat einen Druckschalter, der das trockenlaufen verhindert, sicherheitshalber will ich aber die Pumpe mit dem Relais von der Stromversorgung trennen. Die Pumpe soll auch ohne Ventile der Beregnungsanlage angesteuert werden können, damit z.B. der Gartenschlauch verwendet werden kann.
Umsetzung
Die Pumpe und die Ventile werden über eine 8 Fach Relaiskarte gesteuert. Diese hängt an der Seriellen Schnittstelle meines Linux Home-Servers. Mit einem einfachen Programm werden die Relais gesteuert.
FHEM
Mit notify konnte ich die Befehle zum schalten der Pumpe und der Ventile umsetzten. Damit ist die Zeitsteuerung erledigt.
Was ich bisher nicht geschafft habe, diese notifys Sinnvoll auf die Weboberflächen zu bringen und von dort zu schalten.
Ich habe das Attribut webCmd on:off gesetzt. Als Antwort beim klicken auf eines der Kommandos bekomme ich ,,No set implemented for pumpe_on" als Antwort.
Was muss ich machen, damit ich die Notifys über das Web Schalten kann, am besten mit Icons.
Kann ich einem Notifys Parameter übergeben (z.B. Relaisnummer und Befehl) oder muss ich für jeden denkbaren Schaltvorgang ein eigenes Notify einrichten?
Hallo,
notifys kennen keine "Befehle".
Du musst dir Dummys definieren die dann das jeweilige notify triggern.
Diese Dummys werden dann in FHEM dargestellt und könne mit einem webCmd versehen werden.
So kannst du dann deine Anlage "händisch" steuern.
Grüße
Edith:
ZitatMit notify konnte ich die Befehle zum schalten der Pumpe und der Ventile umsetzten. Damit ist die Zeitsteuerung erledigt.
Mit notify hast du eine Zeitsteuerung gemacht?
Streu mal etwas Code ein bitte damit man dir besser helfen kann. Danke.
Zuerst habe ich mit notify den Befehl pumpe_on erstellt:
pumpe_on
Internals:
DEF pumpe_on { `relais.bin -d /dev/ttyS0 -r 1 -f 51` }
NAME pumpe_on
NOTIFYDEV pumpe_on
NR 31
NTFY_ORDER 50-pumpe_on
REGEXP pumpe_on
STATE active
TYPE notify
dannach die Zeitsteuerung:
streifen
Internals:
CFGFN ./log/fhem.save
DEF 03:00:00 { fhem ("trigger pumpe_on) if ($wday == 5)}
NAME streifen
NR 32
STATE Next: 03:00:00
TRIGGERTIME 1396141200
TRIGGERTIME_FMT 2014-03-30 03:00:00
TYPE at
VOLATILE 1
Wobei die if-kondition noch nicht getestet ist, aber vom Prinziep her sollte das so Funktionieren, oder?
Hallo,
define Pumpe dummy
attr Pumpe webCmd on:off
Das regexp bei pumpe_on auf Pumpe:on ändern
DEF Pumpe:on { `relais.bin -d /dev/ttyS0 -r 1 -f 51` }
sollte bei einem Klick auf on am Dummy Pumpe den Befehl absetzen bzw. dein notify triggern.
Für off kannst du dann analog verfahren bzw. im notify auf on und off prüfen und die zugehörigen Codes absetzen.
Per at würde ich den Dummy schalten bzw. direkt den "Befehl" Pumpe on oder Pumpe off absetzen.
Ungetestet und aus dem Kopf aber sollte klappen.
Grüße
Edith: Die Zeitsteuerung kannst du auch per WeekdayTimer machen. Da entfällt im at die Prüfung auf wday - resp. das at entfällt dann komplett.
Vielen Dank, das funktioniert super!
Nur eine Kleinigkeit noch: in der Smartphone ansicht fehlt die möglich zu schalten. Weder Auswahlliste noch Icons zu sehen.
woran kann das liegen?
Hallo,
zur Smartphone-Ansicht kann ich dir leider nichts sagen.
Sorry.
Aber es findet sich sicher noch jemand der dir auch da weiterhelfen kann.
Grüße
wenn du ein ios device hast dann gehen dort nur svg icons.
im smallscreen mode wird die webCmd liste nicht angezeigt. du kannst entweder devStateIcon verwenden oder dir eine readingsGroup mit den kommandos definieren.
gruss
andre