Schaltintervalle über TabletUI setzen

Begonnen von Enfreyer, 17 Dezember 2016, 13:50:51

Vorheriges Thema - Nächstes Thema

Enfreyer

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 :).

Enfreyer

BUMP

Hat wirklich keiner einen Ansatz für mich? Oder habe ich etwas falsches geschrieben? Oder ist das Problem so nicht lösbar?

CBSnake

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

FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Enfreyer

#3
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 ;).

Mario67

FHEM auf Raspberry Pi 4 mit CUL868, WMBUS,
FS20 ST, FS20 AS4-3, FS20 SU-2, FS20 DF, 1-Wire + RS-232: AB Electronics Com Pi RS232, Brandmelder + Fenster: AB Electronics IO Pi 32
BUDERUS GB142 über EMS/AVR-NET-IO, WESTAFLEX WAC250 über RS232, MySensors
mit fhem.cfg & includes glücklich

Enfreyer

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?

Mario67

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
FHEM auf Raspberry Pi 4 mit CUL868, WMBUS,
FS20 ST, FS20 AS4-3, FS20 SU-2, FS20 DF, 1-Wire + RS-232: AB Electronics Com Pi RS232, Brandmelder + Fenster: AB Electronics IO Pi 32
BUDERUS GB142 über EMS/AVR-NET-IO, WESTAFLEX WAC250 über RS232, MySensors
mit fhem.cfg & includes glücklich

Enfreyer

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?

Mario67

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.
FHEM auf Raspberry Pi 4 mit CUL868, WMBUS,
FS20 ST, FS20 AS4-3, FS20 SU-2, FS20 DF, 1-Wire + RS-232: AB Electronics Com Pi RS232, Brandmelder + Fenster: AB Electronics IO Pi 32
BUDERUS GB142 über EMS/AVR-NET-IO, WESTAFLEX WAC250 über RS232, MySensors
mit fhem.cfg & includes glücklich

Enfreyer

#9
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.

Paul.baumann

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
FHEM auf Raspberry 3
MaxCube (V1.20.04 a-culfw) für HM, MaxCube (V1.20.04 a-culfw) für diverse Max!, NanoCul 433/868, TinyTX-Nachbauten
Multiroom: mehrere Squeezelite-Clients auf Raspberry B+ und LMS auf QNap
Huger WM918 Wetterstation integriert
Tiao-Sprinkler (Open-Sprinkler) integriert

Mario67

Genau das ist in Beitrag #8 umgesetzt.
Wie gesagt: einfach meinen Testaufruf Log() ersetzen!
FHEM auf Raspberry Pi 4 mit CUL868, WMBUS,
FS20 ST, FS20 AS4-3, FS20 SU-2, FS20 DF, 1-Wire + RS-232: AB Electronics Com Pi RS232, Brandmelder + Fenster: AB Electronics IO Pi 32
BUDERUS GB142 über EMS/AVR-NET-IO, WESTAFLEX WAC250 über RS232, MySensors
mit fhem.cfg & includes glücklich

Enfreyer

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.