FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Enfreyer am 17 Dezember 2016, 13:50:51

Titel: Schaltintervalle über TabletUI setzen
Beitrag von: Enfreyer am 17 Dezember 2016, 13:50:51
Hallo Leute,
mein Name ist Hannes und ich bin seit kurzem durch einen Kollegen zur Heimautomatisierung gekommen.
Und schon habe ich meine erste Frage ;).

Aktueller Stand:
Ich habe einen Raspberry Pi 3 mit FHEM, WiringPi und RaspberryRemote. Dazu einen 433MHz Sender sowie drei Brennenstuhl Funksteckdosen. Außerdem habe ich mir ein günstiges Tablet dazugekauft, auf dem ich jetzt via TabletUI die Steckdosen steuern (im Sinne von ein-/ausschalten) kann. Das funktioniert schon mal erstaunlich gut und ging in Sachen Konfiguration durch die guten Tutorials und Dokumentation auch recht problemlos von der Hand.
Dieses "Einstiegsset" ist als Weihnachtsgeschenk gedacht.

Das Schalten erfolgt durch:
define on_Ofen notify Ofen:on {system(,,/usr/bin/send 11000 1 1 &")}


Was ich mir vorstelle:
Ich möchte damit einen Ofen steuern können, der im Keller steht. Dieser soll intervallgesteuert ein und ausgeschaltet werden. Da wir die Laufzeiten des Ofens allerdings dynamisch steuern möchten, kommen hardgecodete Schaltintervalle nicht infrage.
Die Intervalle sollen also vollständig über die TabletUI eingestellt werden können.

Hier eine Visualisierung der Idee:
https://picload.org/image/raloorol/fhemofen.png

Wichtig ist, dass es eine feste Anzahl von Intervallen gibt. Wenn ich das Intervall 1 ändere und OK drücke, soll genau dieses Intervall überschrieben werden und auf keinen Fall ein neues hinzugefügt werden.

Ich habe mich schon durch die command reference gewühlt und bin über die AT's gestolpert. Diese Dokumentation ist zwar sehr umfangreich, aber wenn man eine bestimmte Idee hat, ist es schwierig, die Dinge darin zu finden, die man für die Realisierung braucht.

Kann mir jemand (für Angänger ;) ) erklären, was ich alles brauche und vlt ein entsprechendes Script (?) skizzieren?

EDIT: Ah, und vlt auch eine Empfehlung für entsprechende Oberflächenelemente für die UI :).
Titel: Antw:Schaltintervalle über TabletUI setzen
Beitrag von: Enfreyer am 20 Dezember 2016, 18:19:38
BUMP

Hat wirklich keiner einen Ansatz für mich? Oder habe ich etwas falsches geschrieben? Oder ist das Problem so nicht lösbar?
Titel: Antw:Schaltintervalle über TabletUI setzen
Beitrag von: CBSnake am 20 Dezember 2016, 18:57:59
Hi,
grob zusammengewürfelt:
8 Dummys für jede start-Zeit einen, für jede end-Zeit einen.
Die kannst du alle in ein DOIF packen. Das schaltet dann die Steckdose. Beispiel in der Commandref.
Aber ich wüsste jetzt kein, kompaktes, FTUI Element welches eine Uhrzeit als Format zu lässt, meist eben "normale" Zahlen. Evtl hat da noch jemand nen Tip.
Falls mit dem DOIF Code nicht klarkommst meld dich nochmal, dann tipper ich grob was zusammen.
Grüße
Achim


Gesendet von meinem SM-P605 mit Tapatalk

Titel: Antw:Schaltintervalle über TabletUI setzen
Beitrag von: Enfreyer am 22 Dezember 2016, 17:46:08
Hi Achim,
danke schon mal für die Antwort.

Habe mich jetzt noch mal ein paar Stunden damit beschäftigt und bin nicht wirklich weitergekommen.

Was mir gerade Verständnisprobleme bereitet ist die Tatsache, dass ich Dummies nutzen muss (habe keinen CUL etc, sondern nur einen 433MHz Sender und ein Brennstuhl Steckdosenset) und die Befehle nur via wiringpi bzw raspberryRemote versenden kann. Alle ausführlicheren Beispielcodes, die ich finde, beziehen sich leider nicht auf Dummies.

Erstmal habe ich deswegen noch ein vorgeschobenes Problem:
Das Schalten ist mir aktuell zu unzuverlässig. Eine der Steckdosen reagiert nur bei jedem dritten Klick. Die anderen beiden deutlich zuverlässiger, aber auch nicht immer. Um das Problem einzudämmen, will ich jeden Schaltbefehl mehrmals senden. Und hier komme ich schon nicht weiter.

Eine der Steckdosen ist es jetzt folgendermaßen konfiguriert:

#Steckdose 3
define steckdose3 dummy
attr steckdose3 room Haus
attr steckdose3 setList on off
define off_steckdose3 notify steckdose3:off {system("/usr/bin/send 11000 3 0 &")}
define off_steckdose3 notify steckdose3:off {system("/usr/bin/send 11000 3 0 &")}


Um das ganze mehrfach auszuführen, habe ich folgendes probiert:

Variante 1:
Befehl mehrfach hintereinander kopieren.

define off_steckdose3 notify steckdose3:off {system("/usr/bin/send 11000 3 0 &")}; {system("/usr/bin/send 11000 3 0 &")}; {system("/usr/bin/send 11000 3 0 &")}
define off_steckdose3 notify steckdose3:off {system("/usr/bin/send 11000 3 0 &")}; {system("/usr/bin/send 11000 3 0 &")}; {system("/usr/bin/send 11000 3 0 &")}


Das scheint laut log zwar zu machen, was ich mir vorgestellt habe, aber jetzt reagiert die entsprechende Steckdose nur noch extrem selten (vlt alle 10 klicks)...

Variante 2:

attr on_steckdose3 repeatsame 3


Einen Effekt auf die Funktionalität hat es nicht, dafür bekomme ich folgenden Fehler im Log:

2016.12.22 16:34:37 3: on_steckdose3: unknown attribute repeatsame. Type 'attr on_steckdose3 ?' for a detailed list.


Meine Google-Recherche hat leider zu keinen Ansätzen außer diesen beiden geführt.
Daher meine Zwischenfrage: Wie kann ich die Befehle wiederholt absetzen, um die Zuverlässigkeit zu gewährleisten?


EDIT:
Für das repeatsame brauche ich offenbar ein DOIF-Modul und keine Funktion wie zb "off_steckdose3". Ich möchte im "IF" Block aber keine Uhrzeit oder ähnliches prüfen, sondern nur auf die Eingabe über die UI reagieren. Wie geht das?

EDIT 2:
Die betroffene Steckdose ist eventuell defekt. Sie funktioniert nur dann einigermaßen zuverlässig, wenn die anderen beiden Steckdosen nicht angeschlossen sind. Sobald ich Steckdose 1 oder 2 irgendwo reinstecke, reagiert die dritte praktisch fast gar nicht mehr. Je weiter die Steckdosen vom Sender entfernt sind, desto schlimmer wird es (wenn alle drei Dosen nur 1 bis 2 Meter vom Sender entfernt sind, funktionieren alle zuverlässig. Bei 5 Metern geht die dritte schon nicht mehr. Und zwar genau bis zu dem Zeitpunkt, zu dem ich die anderen beiden herausziehe).


Meine Zwischenfrage bezüglich des mehrfachen Absenden eines Befehls steht übrigens trotzdem noch ;).
Titel: Antw:Schaltintervalle über TabletUI setzen
Beitrag von: Mario67 am 23 Dezember 2016, 01:07:14
Schau Dir mal WeekdayTimer http://fhem.de/commandref.html#WeekdayTimer (http://fhem.de/commandref.html#WeekdayTimer)) an und ggf. die FTUI-Umsetzung (https://forum.fhem.de/index.php/topic,48106.0.html (https://forum.fhem.de/index.php/topic,48106.0.html)).
Titel: Antw:Schaltintervalle über TabletUI setzen
Beitrag von: Enfreyer am 23 Dezember 2016, 15:56:37
Hi Mario,
das sieht gut aus, danke!

Habe mir die Doku dazu durchgelesen und mir jetzt folgende Zeile geschrieben:
define ofen_timer1 WeekdayTimer steckdose3 1234567|15:51|on_steckdose3
(die Definition der steckdose1 steht in meinem letzten Post)

Sobald der Timer triggern soll, erscheint im Log folgendes:
2016.12.23 15:51:00 3: Please define @ first

Was ist mit "@" gemeint? Wo liegt der Fehler?
Titel: Antw:Schaltintervalle über TabletUI setzen
Beitrag von: Mario67 am 23 Dezember 2016, 19:19:41
Ja, dann solltest Du auch steckdose1 schalten  ;)

Weiterhin: Du versuchst ein notify aufzurufen?

Schalte doch einfach die Steckdose mit dem command des WeekdayTimers.

Eher so:
define ofen_timer1 WeekdayTimer steckdose1 1234567|15:51|on 15:52|off

Gruß,
Mario
Titel: Antw:Schaltintervalle über TabletUI setzen
Beitrag von: Enfreyer am 23 Dezember 2016, 20:14:56
Zitat von: Mario67 am 23 Dezember 2016, 19:19:41
Ja, dann solltest Du auch steckdose1 schalten  ;)

Habe ich, habs nur hier im Post verwechselt ;).

Zitat von: Mario67 am 23 Dezember 2016, 19:19:41
Weiterhin: Du versuchst ein notify aufzurufen?

So hab ichs aus nem Tutorial. Wenn ich das Notify aus den Zeilen der Definitionen der Steckdose rausnehme, meckert er im Log:

2016.12.23 20:07:32 1: configfile: Unknown module steckdose1:off
Unknown module steckdose1:on



Zitat von: Mario67 am 23 Dezember 2016, 19:19:41
Schalte doch einfach die Steckdose mit dem command des WeekdayTimers.

Hmm, ich hielt es anders herum für logischer  ???.
Wie schreibt man das dann?

Zitat von: Mario67 am 23 Dezember 2016, 19:19:41
Eher so:
define ofen_timer1 WeekdayTimer steckdose1 1234567|15:51|on 15:52|off

Funktioniert leider auch nicht. Im Log steht dann immer noch:
Please define @ first

Ich bin, wie gesagt, blutiger Anfänger. Vlt mache ich ja von grundauf irgendwas falsch bzw ich habe irgendein Verständnisproblem?
Titel: Antw:Schaltintervalle über TabletUI setzen
Beitrag von: Mario67 am 23 Dezember 2016, 23:16:57
Ich meinte nicht die Umsetzung mit den notify ansich, sondern nur die Tatsache, dass Du sie direkt als command des WeekdayTimers aufzurufen versuchst.

Folgendes funktioniert nachgewiesen:

define steckdose3 dummy
attr steckdose3 setList on off

define steckdose3_ntf notify steckdose3 {Log(1, $EVENT)}

define ofen_timer1 WeekdayTimer steckdose3 1234567|23:06|on 23:07|off


Du musst nur noch das command austauschen.
Titel: Antw:Schaltintervalle über TabletUI setzen
Beitrag von: Enfreyer am 24 Dezember 2016, 11:22:15
Hi,
habe jetzt folgendes probiert:


define steckdose1 dummy
attr steckdose1 setList on off
define steckdose1_ntf notify {Log(1, $EVENT)}
define WeekdayTimer steckdose1 1234567|11:00|{system("/usr/bin/send 11000 1 1 &")} 11:01|{system("/usr/bin/send 11000 1 0 &")}


Jetzt sagt er mir im Log:

Unknown command 11000, try help.


Es ist zum Heulen... ich versuchs jetzt mal mit GenShellSwitch. Mal gucken, was dann passiert.

EDIT
===========================

So, Versuch mit GenShellSwitch ist ebenfalls gescheitert.
Folgenden Code habe ich geschrieben:

define timed_steckdose1 GenShellSwitch /usr/bin/send 11000 1 1 0
define ofen_timer1 WeekdayTimer times_steckdose1 1234567|12:21|on 1234567|12:22|off


Der Fehler ist wie bei einem meiner vorherigen Versuche wieder folgender:

2016.12.24 12:21:00 3: Please define @ first


Ich bin bald reif für die Klapse...



EDIT 2:
Im Log steht bei jedem Start von FHEM übrigens folgendes:

2016.12.24 12:20:47 2: Error messages while initializing FHEM: configfile: 0 0 0 0 0 0 0 0

Bin mir nicht sicher, ob es schon vom ersten Tag an dort steht. Hat das was zu bedeuten? Denn "0" ist ja eigentlich kein Rückgabewert für einen Fehler.
Titel: Antw:Schaltintervalle über TabletUI setzen
Beitrag von: Paul.baumann am 24 Dezember 2016, 13:29:48
Ich hab das jetzt nur überflogen, aber im ersten Beitrag schreibst du, dass du per Dummy und Notify erfolgreich schalten kannst. Das sollte auch alles so bleiben, nur kommt eben zusätzlich der WeekdayTimer hinzu. Und der triggert dann den Dummy.

Paul
Titel: Antw:Schaltintervalle über TabletUI setzen
Beitrag von: Mario67 am 24 Dezember 2016, 15:01:38
Genau das ist in Beitrag #8 umgesetzt.
Wie gesagt: einfach meinen Testaufruf Log() ersetzen!
Titel: Antw:Schaltintervalle über TabletUI setzen
Beitrag von: Enfreyer am 24 Dezember 2016, 18:01:30
Meine FHEM Installation war offenbar inkonsistent.
Das "define @ first" deutete darauf hin, dass in irgendeiner der config-Dateien ein "@" in Verbindung mit einem "SET" benutzt wurde. Hab ein Update gemacht, jetzt gehts. Trotzdem ist der GenShellSwitch ganz praktisch ;).

Auf der WeekdayTimer funktioniert seit dem Update einwandfrei.

Die Frage, die sich mir immer noch stellt, ist, wie ich Befehle mehrfach senden kann. Denn die schätzungsweise 95% sind mir zu unzuverlässig. Immerhin soll damit morgens der Ofen eingeschaltet werden. Wenn das fehlschlägt, müssen alle im Haus ungeduscht zur Arbeit fahren ;). Würde das gern wenigstens auf 99,x % bekommen.