Bitte um Richtungsangabe

Begonnen von FaKre, 21 September 2017, 17:35:12

Vorheriges Thema - Nächstes Thema

FaKre

Nabend zusammen,

Ich bräuchte mal einen Rat, ob ich davor stehe mit Kanonen auf Spatzen zu schießen und einen eleganteren Weg einfach übersehen habe.

Das Szenario:
Ich habe mir eine Lüftersteuerung für 3 Lüfter mit einem Arduino Nano + Ethernet Shield realisiert.
Die Kommunikation läuft über HTTP und GET-requests.
Die Requests enthalten die Nummer des Lüfters und einen Wert zwischen 0 und 100.
Den Aktuell eingestellten Wert kann ich ebenfalls über einen Request pro Lüfter abfragen.

Der Plan
Ich würde die Lüfter gerne in meine FHEM Installation (und Tablet UI) einbinden.
Am liebsten so ähnlich wie ich das von meinem Homematic Dimmern gewohnt bin, also Set on, off, Prozentzahl, on-for-timer, off-for-timer(?!).
Jeder Lüfter als ein Gerät in FHEM; auch wenn die Kommunikation über den gleichen Arduino läuft.

Ich hatte zuerst dran gedacht mit mal das Homematic-Modul anzusehen und mich da bei einem Dimmer zu bedienen und nur die Stellen innerhalb der Set und Get Methoden auszutauschen.
Leider bin ich durch die Größe des HM Moduls ein bisschen erschlagen worden. (Auch weil ich auf den ersten Blick auf Perl nicht wirklich warm werden wollte)
Dann dachte ich mir: Na gut, versuchst du selbst ein Gerät zu erstellen ohne irgendwo abzukupfern.

Die Frage:
Ist das der Weg, den ich gehen sollte? Oder wäre es an der Stelle sinnvoller etwas anderes zu benutzen, vielleicht einen dummy mit subType dimmer  (obwohl dummys ja kein subType Attribut zulassen), aber ich hoffe ihr versteht wodrauf ich hinaus will.


Schonmal vielen Dank für's Lesen, bis hier hin ;)

Gruß
Fabian

Beta-User

Für HTTP-Befehle gibt es nach meiner Kenntnis ein eigenes Basismodul HTTPMOD, wobei ich damit keine Erfahrung habe, aber damit - ggf. iVm. etwas readingsGroup-Zauberei - sollte es an sich gehen.

Wenn du den Code ändern willst, ginge auch MySensors, damit wäre z.B. eine Dimmer-Funktion recht einfach in FHEM umzusetzen.
Bei Interesse an letzerem: gerne rückfragen...

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Dr. Boris Neubert

Hallo,

HTTPMOD wäre auch meine erste Anlaufstelle. Ansonsten ECMD und den HTTP-Request auf der Socket-Verbindung ausgeschrieben.

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

FaKre

Moin,

schonmal vielen Dank für die Antworten,

HTTPMOD könnte man mMn. benutzen um die Werte regemäßig abzufragen aber andere Werte zu setzen da wohl so wie ich das gerne hätte nicht möglich.

Am besten gefällt mir der Ansatz mit MySensors; da werde ich mich mal reinlesen.
Auf Anhieb habe ich diesen Sketch https://www.mysensors.org/build/dimmer gefunden, der eigentlich genau das macht, was ich brauche, denn die Lüfter steuere ich vom Arduino auch per PWM an.
Allerdings muss ich jetzt noch rausfinden, wie ich da 3 Lüfter über den einen Arduino steuern kann, indem ich eine ID oder sowas übergebe.

Beta-User

Zu MySensors: Du vergibst zu jedem Lüfter eine ChildID, dann kannst du soviele Lüfter steuern, wie PWM-Pins vorhanden sind 8) .

Dann kannst du über die receive()-Funktion die einzelnen Läfter wieder über den message.sensor auseinanderhalten. Dazu mal in den Multi-Relay-Sketch sehen (über diesen Link), da ist das ganze für 4 Relais umgesetzt.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

amenomade

ZitatHTTPMOD könnte man mMn. benutzen um die Werte regemäßig abzufragen aber andere Werte zu setzen da wohl so wie ich das gerne hätte nicht möglich.

Natürlich kann man mit HTTPMOD auch Werte setzen.
https://wiki.fhem.de/wiki/HTTPMOD#Advanced_configuration_to_define_a_set_command_and_send_data_to_a_device

Sogar in komplexen Szenarien: https://wiki.fhem.de/wiki/HTTPMOD#Further_replacements_of_URL.2C_header_or_post_data

Man muss nur deine HTTP Requests kennen (GET oder POST)

Nur das "on-for-timer" und "off-for-timer" wäre schwieriger. Das kann man aber mit DOIF oder Notify hinkriegen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

FaKre

@amenomade

oh mann, dass ich das nicht gefunden hab... muss wieder einer dieser Tage sein. Danke für die Links.
Habe mich jetzt aber doch für MySensors entschieden und mache erstmal damit weiter.
Aber gut einen Plan B zu haben.

@Beta-User
Was soll ich sagen, es läuft  ;D

Mein aktuelles Problem hängt weniger MySensors als mit FHEM zusammen.
Ich habe via setCommands on:percentage:100 off:percentage:0 eingefügt um die setExtensions zu bekommen.
Nur hab ich leider zu kurz gedacht.
on bzw. off-for-timer machen ja genau, was sie beschreiben, sie wechseln zwischen on und off, also 0 und 100.

Mein Wunsch wäre, wenn ein Lüfter auf 50% steht und ich sage off-for-timer 10, dass der für 10 Sekunden auf 0 und danach wieder auf 50 geht.
Mal schauen, wie ich das hinbekomme.

Beta-User

Zitat von: FaKre am 22 September 2017, 16:45:29
@Beta-User
Was soll ich sagen, es läuft  ;D

Mein aktuelles Problem hängt weniger MySensors als mit FHEM zusammen.
Ich habe via setCommands on:percentage:100 off:percentage:0 eingefügt um die setExtensions zu bekommen.
Nur hab ich leider zu kurz gedacht.
on bzw. off-for-timer machen ja genau, was sie beschreiben, sie wechseln zwischen on und off, also 0 und 100.

Mein Wunsch wäre, wenn ein Lüfter auf 50% steht und ich sage off-for-timer 10, dass der für 10 Sekunden auf 0 und danach wieder auf 50 geht.
Mal schauen, wie ich das hinbekomme.
Freut mich sehr zu hören :D . Meine Erfahrung ist auch die: hat man irgendeinen funktionierenden Arduino-Code, ist die Einbindung über MySensors recht einfach.

Vorab: ich bin mir nicht sicher, ob die setCommands so richtig sind, oder Teil des Problems. An sich sollte - ohne Änderung der setCommands - ein "ON" den letzten Level wieder herstellen; kann aber sein, dass man dazu im Dimmer-Sketch zwischen V_LIGHT und V_DIMMER unterscheiden muß. Ein V_LIGHT könnte man dann dazu nutzen, den letzten bekannten V_DIMMER-Wert wieder herzustellen.

Was das mit "timed on" und "off" angeht noch folgender Gedanke: Zu jedem Lüfter noch ein zugehöriges Custom-Child präsentieren (ich würde es erst mal unter derselben ID versuchen, das klappt in der Regel und man weiß dann leichter, was zusammengehört). Dann hast du weitere Kanäle und könntest z.B. unter V_VAR1 eine Einschaltdauer bestimmen (und unter V_VAR2 eine zukünftige Einschaltzeit, sofern das sinnvoll ist).

Der Code auf dem Arduino wird dadurch natürlich etwas länger, weil du ja irgendwie auswerten mußt, ob ggf. mit einer alten Ausschaltdauer weitergemacht werden soll, oder ob diese bei Änderung des %-Werts oder einem ein-Befehl ignoriert werden soll, bis wieder eine separate Anweisung erfolgt.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files