gelöst Steuern eine Relaiskarte über die Serielle Schnittstelle

Begonnen von Pnemenz, 27 März 2014, 22:46:22

Vorheriges Thema - Nächstes Thema

Pnemenz

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
TYPEDUMMY

mit den Atributen






devStateIconon:black_Steckdose.on off:black_Steckdose.off
event-on-update-reading trigger relais1_toggle
iconit_remote_folder
setListon 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


justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Pnemenz

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

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Pnemenz

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?

Puschel74

#5
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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Pnemenz

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?

Puschel74

#7
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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Pnemenz

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?

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968