Frage zu einem Modul z.B. Hand und Automatik

Begonnen von moonsorrox, 20 Dezember 2013, 18:51:11

Vorheriges Thema - Nächstes Thema

moonsorrox

gibt es eigentlich schon ein Modul oder wenn nicht ist es möglich ein Modul zu erstellen wo man sagt ich möchte einzelne Aktoren oder auch Gruppen von Aktoren Automatisch oder auch von Hand zu schalten..?

Ich stelle mir das so vor ich gebe jedes Gerät/Aktor in dieses Modul welches ich gern hätte oder auch alle Geräte/Aktoren die z.B. Rollladen und Beleuchtung betreffen, also z.B. "Rollladen Wohnzimmer", "Rollladen Schlafzimmer", "Beleuchtung Garage", "Beleuchtung Eingang" usw. und jetzt kann ich jedes Gerät auf Automatik oder auch auf Hand schalten also wie ich es gern möchte.
Das heißt ich kann dann wahlweise jeweils bestimmte Gruppen oder auch einzelne Geräte auf Hand oder Automatik stellen.

Ist das überhaupt machbar..?

Ich stelle mir vor das man dies dann einfach über die Weboberfläche, Tablet oder Handy einstellen kann, denn ich denke ein extra Schalter dafür der die Geräte dann einzeln aufruft ist wohl zu umständlich
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

hexenmeister

Nichts verstanden. Was heißt hier automatisch?
Warum nicht Struktur nehmen?

Gruß

Alexander

moonsorrox

Zitat von: hexenmeister am 20 Dezember 2013, 19:04:21
Nichts verstanden. Was heißt hier automatisch?


Automatisch bedeutet, das die Geräte so arbeiten wie sie in Fhem normal arbeiten, ist also z.B. über Sunset/Sunrise gearbeitet worden dann so wie es die Anweisungen in Fhem machen  und Hand ist eigentlich selbsterklärend...!

Sorry wenn es nicht verstanden wurde, aber ich arbeite mit SPS Steuerungen in der Firma (leider nix Perl alles Simatic ) und da gibt es "immer" Hand und Automatik Stellungen, ist Automatik eingestellt arbeitet die jeweilige Maschine nach Programm in unserem Fall eben nach FHem und Hand ist ja klar....

Und dafür gibt es meistens einen Schalter oder Menüpunkt und gut ist es.... OK... ;)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

herrmannj

geht, aber es gilt: "depends on ..."

Eine Unterscheidung ist in der Art der Automatik und DU musst das individuell für Dich designen. Die Art will sagen: steuert fhem über notify / at / etc oder stellt das Device die Automatik zur Verfügung (Heizkörperthermostat etc) ?

Ich vermute Du meinst Fall 1, also fhem. Jedes notify / at hat ein attr "disabled". Wenn Du das auf eins stellst werden die nicht ausgeführt: Automatik aus. In komplexeren Fällen nimmst Du dummys und fragst in den notify das dummy ab. Abhängig vom Wert (vielleicht "automatik", "manuell") kannst Du dann unterschiedliches Verhalten festlegen. Den dummy kannst Du über die Oberfläche schalten

Wichtig ist die Grundstruktur des Ablaufes, diie muss sitzen.

vg
Jörg

moonsorrox

OK, damit muss ich mich dann mal beschäftigen habe ich bisher noch nicht gesehen... lese zwar viele Beiträge aber das ist mir so noch nicht klar gewesen.

Gut das wird dann für Leute die viele Geräte haben eine aufwendige Arbeit.
Mein Hintergrund ist einfach ich möchte bestimmte Geräte also ich sage mal ein Rollladen einfach aus Fhem raus nehmen und schon fährt er nicht mehr runter oder eben ein Licht ich sage mal im Sommer ausschalten wenn es draußen kaum gebraucht wird aber eben nur bei Bedarf, ich denke das können hier so einige gebrauchen.

Ich werde mal das Forum danach durchsuchen und deinen Hinweis mit dem "notify und "vielleicht "automatik", "manuell" aufgreifen. Evtl. hat jemand schon soetwas am laufen, dann bin ich für jeden Codeschnipsel dankbar..
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

hexenmeister

Oder Du definierst ein user-attribut an  Deinen Geräten (AutomatikDisabled oder so) und fragst den zustand in Deinem code ab. Das dürfte Deinem Wunsch recht nahe kommen.

Gruß

Alexander

hexenmeister

...
Das wäre dann lediglich ein einziges Zusatzbefehl an jedem at/notify etc. Etwa: if(automatic(deviceYYZ))...

herrmannj

ZitatIch werde mal das Forum danach durchsuchen...

sorry, da hab ich mich noch nicht klar genug ausgedrückt. Deiner Frage nach vermute ich auch das Du einem konzeptionellen Irrtum aufsitzt. Deine Automatik besteht letztendlich aus zwei Teilen: einem Aktor (Motor für den Rollladen) und einem auslösenden Teil. Da wo das sunset drinsteht (wird wohl ein "at" sein").

Die Analogie zum Auto wären Gaspedal und Motor (Aktor). Wenn Du langsamer fahren möchtest machst Du ja auch nix am Motor, Du gehst vom Gas. Von da kommt der Befehl. Wenn der Rollladen nur manchmal aufgehen soll dann darf der Befehl zum aufgehen auch nur manchmal kommen.

Fhem bietet eine breite Palette von Möglichkeiten wie Du das programmieren kannst. (Bei der SPS steht das "P" auch für programmierbar, irgendein Programmierer hat den "disable" button da mal ganz aktiv reingeschrieben ;-).

Schau mal in die Attribute von dem "at" der den Befehl zum hochfahren des Rollladen enthält. Dort findest Du ein Attribut "disable", das stellst Du auf "1". Damit löst dieses eine "at" nicht mehr aus und der Rollladen bekommt morgens nicht das Kommando zum öffnen.

vg
Jörg

moonsorrox

@herrmannj
Ja klar steht bei mir ein at drin, hier mal z.B. Licht

define AussenLampeEin at *{sunset("HORIZON=-12",0,"17:30","22:30")} set AussenLampe on
define AussenLampeAus at *{sunset(21600,"22:55","23:45")} set AussenLampe off

ich werde mal danach suchen und wenn nicht fragen kostet ja nichts, denn mir fehlt da irgendwie noch der richtige Ansatzpunkt wo und wie ich eingreife...!

Schade das ich keine Ahnung von Perl habe bzw. Modulerstellung..!
Aber... um nochmals das mit dem Modul aufzugreifen, ich denke es wäre leichter ein Modul zu haben und in diesem Modul werden z.B. alle Geräte erstellt oder aufgerufen und ich brauche nur noch zu sagen dieses nehme ich oder diesen Aktor oder eben keines oder auch alle.
Das Modul schaut eben in der Konfig nach was gibt es alles und setzt so um z.B. Rollladen 1 und 2, Beleuchtung WZ und Eingang werden durch fhem gesteuert und Rollladen 3 und 4 Beleuchtung Garage ist auf Hand/Manuell also Aus.
Sicher gibt es dann noch z.B. bei Beleuchtung die Möglichkeit das mit dem eigentlichen Schalter zu schalten, oder am Rollladen eben habe ich bei Rollladen 3 und 4 nur die Fahrt Abends des runter fahrens auf Hand/Manuell und morgens wieder durch fhem gesteuert.

So in der Art evtl. habe ich es zu kompliziert erklärt, aber ich werde mal ein wenig tüfteln wie ich das machen kann. Werde mal im Wiki nach den einzelnen Beispielen schauen.

Ich will damit eigentlich nur erreichen das ich jederzeit die Möglichkeit habe jeden Aktor oder jedes Gerät einfach per Klick aus der automatischen fhem STeuerung raus zu nehmen und bei Bedarf wieder durch fhem zu schalten.

Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

hexenmeister

ungetestet (is ja auch schon spät :) ):

fhem.cfg ergänzen:
attr global userattr DbLogExclude devStateIcon devStateStyle fp_Erdgeschoss icon room_map sortby structexclude webCmd automaticOff

in 99_myUtils:
sub
automatic($) {
  my ($name) = @_;
  if(AttrVal($name, 'automaticOff', '0') == 1 ) {
    return 0;
  } else {
    return 1;
  }
}

sub
smartSet($$) {
  my ($name, $val) = @_;
  if(automatic($name)) {
    fhem("set ".$name." ".$val);
  }
}

at-Befehl:
define AussenLampeEin at *{sunset("HORIZON=-12",0,"17:30","22:30")} {smartSet('AussenLampe', 'on')}

irgendwie so... dann setzt Du halt bei den Geräten, die nicht gesteuert werden sollen, den Attribut 'automaticOff' auf 1.
Ein eigenes Modul dafür wäre wohl etwas übertrieben, denn Du muss dann alle verwendete Befehle (at, notify) als Module implementieren.

Grüße,

Alexander

moonsorrox

jo vielen Dank ich werde das morgen mal antesten...

OT:
ich habe mich mal in deinem sehr Guten Tech Blog umgeschaut tolle Sachen hast du da drin um den Pi und die Fhem Homeautomation, irgend wie sind wir schon einmal aufeinander getroffen, da du ja aus Langenhagen bist und ich genau in Langenhagen arbeite... ich weiß aber nicht mehr um was es da ging...  :D
Übrigens habe ich mir das mit dem USB Stick mal angeschaut, denn ich habe Kopfstand gemacht um das zu ändern und bei dir sieht es sehr easy aus wie das geht... ich sage ja tolle Beiträge in deinem Blog

Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

ich habe das vorhin mal in die jeweiligen Module und cfgs eingegeben..!

Frage dazu: Das habe ich in die fhem.cfg eingetragen so wie du geschrieben hast...
attr global userattr DbLogExclude devStateIcon devStateStyle fp_Erdgeschoss icon room_map sortby structexclude webCmd automaticOff

den Rest in die myUtils..

und wo sehe ich jetzt was, oder wo kann ich das umstellen..?
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

hexenmeister

Hi moonsorrox!

Danke für die Blümen ;)
Ich schreibe hin und wieder in meinen Log , würde gerne mehr tun, fehlt leider oft die Zeit.

Mit dem 'attr global userattr ...' hast Du einen Benutzerdefiniertes Attribut namens 'automaticOff' definiert. Jetzt kannst Du an jedem Gerät dieses Attribut setzen. (Noch besser die Definition bei global mit möglichen Werte anzugeben ('automaticOff:0,1'), dann wird bei setzen des Attributes eine Auswahlliste angeboten.) Jetzt setzt Du bei den Geräten, die aus der Steuerung ausgenommen werden sollen, diesen Attribut auf '1'. Wenn Du zum Ändern des Zustandes die Funktion 'smartSet' benutzt, dann prüft diese bei dem fraglichen Gerät den Wert dieses Attributes und führt keine Änderung durch, wenn dieser gleich '1' ist.

Die Idee ist natürlich ausbaufähig. Man könnte die Attribute bequemmer setzen (Mit Dummy-Schalter oder sonst wie). Man könnte weitere Werte vorsehen (z.B. spezieller Wert für eine einmalige Ausnahme (smartSet würde diesen bei  der Verwendung löschen), oder Werte, die nur einen Tag gelten (und nachts durch ein AT-Job gelöscht werden)... je nach dem, was man so braucht.

moonsorrox

Zitat von: hexenmeister am 21 Dezember 2013, 23:53:49
Mit dem 'attr global userattr ...' hast Du einen Benutzerdefiniertes Attribut namens 'automaticOff' definiert. Jetzt kannst Du an jedem Gerät dieses Attribut setzen. (Noch besser die Definition bei global mit möglichen Werte anzugeben ('automaticOff:0,1'), dann wird bei setzen des Attributes eine Auswahlliste angeboten.)
OK d.h. ich müßte den Eingriff jedesmal in der entsprechenden Konfiguration des Gerätes machen..? das wäre sehr umständlich..!
Besser wäre, wenn ich eine Gruppe definieren und dieser alle die Geräte einsetze die ich schalten möchte mit jeweils der Möglichkeit eben EIN/AUS

Zitat von: hexenmeister am 21 Dezember 2013, 23:53:49
Die Idee ist natürlich ausbaufähig. Man könnte die Attribute bequemmer setzen (Mit Dummy-Schalter oder sonst wie).

ich werde mir mal die Dummy Geschichte durchlesen und nach Beispielen suchen ob das besser geht
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

justme1968

schaut euch mal die neue erweitere syntax für das set an: http://forum.fhem.de/index.php/topic,17074.0.html.

damit kann man genau solche globalen bedingungen berücksichtigen und dann z.b. nichts machen wenn das set aus irgendeiner automatik kommt.

ich bin noch dabei die erweiterung auch in structure und LightScene einzubauen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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