FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: MAC66666 am 21 Februar 2018, 00:22:18

Titel: Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: MAC66666 am 21 Februar 2018, 00:22:18
Hi,
ich möchte einen Wert auslesen (desiredTemperature) und diesen innerhalb eines Notifys bei Tastendruck erhöhen bzw. verringern. Ich nehme an, irgendwie per Variable setzen, readingsval usw. aber mir fehlt die genaue Syntax... Ich habe nicht mal einen Versuch gestartet, weil ich hänge... Kann mir da jemand helfen?

Was ich bisher gefunden habe sind riesige Scripte für die 99_myutlis aber das muss doch auch mit minimalem Code in meinem notify gehen?

Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: CoolTux am 21 Februar 2018, 07:10:24
Schau Mal hier.
https://m.youtube.com/watch?v=fQ_50-YSr6w

Das ist genau das was Du suchst, nur halt mit Hue Lampen. Musst nur bisschen umändern.
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: nils_ am 21 Februar 2018, 09:32:56
Zitat von: MAC66666 am 21 Februar 2018, 00:22:18
Ich habe nicht mal einen Versuch gestartet, weil ich hänge...
du solltest dringend was gegen deine _hänger_ tun.


und auch wenn der code noch so schlimm ist, kannst du ihn mMn ruhig posten!
so können wir immer nur raten, und du musst devicenamen usw usw. anpassen.

einfach mal mehr Infos posten!!!


ansonsten:
- anfängerdoku lesen!
- commandref benutzen
-- http://commandref.fhem.de/commandref_DE.html#notify
-- http://commandref.fhem.de/commandref_DE.html#perl (speziell der Teil ab Value() )
-- http://commandref.fhem.de/commandref_DE.html#setreading
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: Hollo am 21 Februar 2018, 09:35:16
Zitat von: MAC66666 am 21 Februar 2018, 00:22:18
...Was ich bisher gefunden habe sind riesige Scripte für die 99_myutlis aber das muss doch auch mit minimalem Code in meinem notify gehen?
Ob Du das direkt im notify oder durch eine kleine Funktion in der 99_myUtils machen willst, bleibt eigentlich Dir überlassen.   :D

Der Ablauf ist aber identisch; sinngemäß...
- aktuellen Wert aus Reading in eine Variable lesen/schreiben ( sowas wie aktWert = ReadingsVal("meinThermostat_Kanal", "desiredtemp", "20") )
- Wert entsprechend erhöhen ( sowas wie neuWert=aktWert+1 )
- neuen Wert setzen ( sowas wie "set meinThermostat_Kanal desiredtemp "neuWert" )

Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: MAC66666 am 21 Februar 2018, 09:36:57
Genau, die Logik ist mir klar, nur die genaue Syntax nicht, da haperts bei mir noch gewaltig...

Zitat von: nils_ am 21 Februar 2018, 09:32:56

und auch wenn der code noch so schlimm ist, kannst du ihn mMn ruhig posten!
so können wir immer nur raten, und du musst devicenamen usw usw. anpassen.

einfach mal mehr Infos posten!!!

Habe ja noch gar keinen Code, weil mir der Ansatz fehlt  ;)

Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: rabehd am 21 Februar 2018, 11:44:21
ZitatHabe ja noch gar keinen Code, weil mir der Ansatz fehlt 

passt nicht zu

ZitatGenau, die Logik ist mir klar,

Vielleicht findest Du jemanden der Dir Dein FHEM bastelt.
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: Thyraz am 21 Februar 2018, 12:05:23
Zitat von: MAC66666 am 21 Februar 2018, 09:36:57
Genau, die Logik ist mir klar, nur die genaue Syntax nicht, da haperts bei mir noch gewaltig...

Habe ja noch gar keinen Code, weil mir der Ansatz fehlt  ;)

Der Post von Hollo beinhaltet doch schon fast den gesamten Code den du innerhalb des Notifies brauchst.
Was soll man denn da noch liefern?

Wenigstens minimale Eigeninitiative zu zeigen wäre schon hilfreich.
Und wenn es nur dadurch ist, dass du mitteilst wo du jetzt GENAU hängst nachdem du die Logik und 90% des Codes schon vor dir hast.
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: MAC66666 am 21 Februar 2018, 21:07:25
Meine Antwort bezog sich ja auf Nils' Post, vor Hollos Post. Ich habe aber nun eine Ahnung, wie ich das umsetze. Und dann kommt mein fehlerhafter Code hier rein  ;)

Mit Logik meinte ich, dass ich weis was passieren soll, ich aber Syntax Probleme habe...  Ich wusste z. B. nicht so richtig, wie ich die Variablen innerhalb des Notifys verpacken soll... Das von Hollo hilft hoffentlich schon weiter...
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: schwatter am 21 Februar 2018, 21:30:38
Gerade eben musste ich mir ein DOIF anlegen um Volume zu steuern. Wert +/-. Nutze einen HM-PB-6-WM55 um StreamRadio zu steuern.

([HM_6Buttons:"^HM_566EBA_Btn_03.Short$"]) (set Dum_Volume_D {([Dum_Volume_D]-10)})
DOELSEIF ([HM_6Buttons:"^HM_566EBA_Btn_04.Short$"]) (set Dum_Volume_D {([Dum_Volume_D]+10)})


Vielleicht hilft dir das.
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: fiedel am 22 Februar 2018, 04:30:51
Irgendwo im Streamradio- Thread steht auch ein Lautstärketaster- Beispiel von mir als Notify.
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: MAC66666 am 23 Februar 2018, 14:01:36
Ja, perfekt, das habe ich gefunden und genutzt! vielen Dank!

hier noch mal ein Auszug aus meinem Notify:

{ my $dtemp_plus = Value("dTWZli") + 1;;
  my $dtemp_minus = Value("dTWZli") - 1;;

.
.
.

  if ($EVTPART1 == 4 and $dtemp_plus >=30) {
    fhem ("set dTWZli 30");
    fhem ("set ESPEasy_SWZ1_Touch oledframedcmd on"); 
    fhem ("define Disptemp at +00:00:15 set ESPEasy_SWZ1_Touch oledframedcmd off");
}
  if ($EVTPART1 == 64 and $dtemp_minus <=5) {
    fhem ("set dTWZli 5");
    fhem ("set ESPEasy_SWZ1_Touch oledframedcmd on"); 
    fhem ("define Disptemp at +00:00:15 set ESPEasy_SWZ1_Touch oledframedcmd off");
}

  if ($EVTPART1 == 4 and $dtemp_plus <=30) {
    fhem ("set dTWZli $dtemp_plus");
    fhem ("set ESPEasy_SWZ1_Touch oledframedcmd on"); 
    fhem ("define Disptemp at +00:00:15 set ESPEasy_SWZ1_Touch oledframedcmd off");
}
  if ($EVTPART1 == 64 and $dtemp_minus >=5) {
    fhem ("set dTWZli $dtemp_minus");
    fhem ("set ESPEasy_SWZ1_Touch oledframedcmd on"); 
    fhem ("define Disptemp at +00:00:15 set ESPEasy_SWZ1_Touch oledframedcmd off");
}
}


mit drei anderen Notifies (die fasse ich ggf. noch zusammen) wird der Wert vom Dummy an das Thermostat bzw. vom Thermostat an das Dummy gesendet und vom Thermostat an mein Display. Ist ein bisschen langsam, aber ich drück ja nicht von 5 bis 30 Grad immer alles durch, wenn doch sehe ich halt nicht gleich den aktuellen Wert... Wenn am Thermostat ein "halber" Wert, also irgendwas mit x.5 Grad eingestellt wird, bleiben zwar alle Dummywerte auch auf x.5 Grad, aber damit kann ich erst mal leben. Könnte man natürlich auch noch ändern...


Super, danke!
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: betateilchen am 23 Februar 2018, 14:12:19
*grusel*
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: MAC66666 am 23 Februar 2018, 15:36:44
Weil die Befehle (noch) nicht zusammengefasst sind? Oder weil es so ein Monsternotify ist? Oder weil es über ein Dummy geht? Oder warum?
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: CoolTux am 23 Februar 2018, 15:55:01
Weil Dein Code unnötig aufgebläht ist.
Sowas kann man mit 3-5 Zeilen erschlagen.
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: MAC66666 am 23 Februar 2018, 17:22:26
Ja, ich muss mir das erst mal so vor Augen halten. Komprimieren kann man ja noch... Optimierungsvorschläge?
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: MAC66666 am 23 Februar 2018, 19:50:17
Ja blöd,
brauche ja gar kein Dummy... Außerdem hab ich damit meine Credits vom Max Thermostat aufgebraucht, kleines Fehlerchen gemacht... Jetzt muss ich warten, noch 45 messages im Queue  :(

ich habe es mal so umgebaut:
{ my $dtemp_plus = ReadingsVal("TWZli","desiredTemperature","19") + 1;;
  my $dtemp_minus = ReadingsVal("TWZli","desiredTemperature","19") - 1;;
.
.
.

  if ($EVTPART1 == 4 and $dtemp_plus >=30) {
    fhem ("set TWZli desiredTemperature 30");
    fhem ("set ESPEasy_SWZ1_Touch oledframedcmd on;define Disptemp at +00:00:15 set ESPEasy_SWZ1_Touch oledframedcmd off"); }
  if ($EVTPART1 == 64 and $dtemp_minus <=5) {
    fhem ("set TWZli desiredTemperature 5");
    fhem ("set ESPEasy_SWZ1_Touch oledframedcmd on;define Disptemp at +00:00:15 set ESPEasy_SWZ1_Touch oledframedcmd off"); }
  if ($EVTPART1 == 4 and $dtemp_plus <=30) {
    fhem ("set TWZli desiredTemperature $dtemp_plus");
    fhem ("set ESPEasy_SWZ1_Touch oledframedcmd on;define Disptemp at +00:00:15 set ESPEasy_SWZ1_Touch oledframedcmd off"); }
  if ($EVTPART1 == 64 and $dtemp_minus >=5) {
    fhem ("set TWZli desiredTemperature $dtemp_minus");
    fhem ("set ESPEasy_SWZ1_Touch oledframedcmd on;define Disptemp at +00:00:15 set ESPEasy_SWZ1_Touch oledframedcmd off"); }
}



kann das klappen?
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: Wernieman am 23 Februar 2018, 19:55:55
Warum fügst Du einige FHEM-Befehle zusammen, bei anderen Trennst Du es aber?
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: MAC66666 am 23 Februar 2018, 21:58:44
Die zwei zusammengefassten Display-Befehle werden bei jeder Aktion widerholt. Das Notify hat 16 ifs. Der Übersichtlichkeit halber, so lange das notify noch nicht fertig ist, sind alle Individualbefehle extra. Wird später sicher auch zusammengefasst werden.
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: fiedel am 24 Februar 2018, 10:17:16
Zitat von: CoolTux am 23 Februar 2018, 15:55:01
Weil Dein Code unnötig aufgebläht ist.
Sowas kann man mit 3-5 Zeilen erschlagen.

Da würde mich wirklich mal ein konkretes Beispiel interessieren mit etwas Erläuterung dazu. Ich programmiere seit Jahren in diesem "aufgeblähten" Stil, auch weil ich meinen Code später noch verstehe. Bin aber durchaus an tendenziell ökonomischer Programmierung interessiert.

Mal ein Beispiel aus der Praxis: Neulich haben wir auf der Arbeit ein SPS- Programm mit (sehr ökonomischen, aber schwer verstehbaren) Multiinstanzen wieder zurück zu herkömmlicher Programmierung umgestellt. Einfach weil zuvor z.B. ein Schichtelektriker nicht den Hauch einer Chance gehabt hätte, mit dem Programm einen Maschinenfehler zu lokalisieren. Dem ursprünglichen Programmierer macht sicher so leicht keiner was vor und er wird für sein imenses Wissen bestaunt - aber in der Praxis ist er kaum zu gebrauchen, bzw. muss lernen Anwenderfreundlicher zu programmieren.
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: CoolTux am 24 Februar 2018, 10:34:31
Zitat von: fiedel am 24 Februar 2018, 10:17:16
Da würde mich wirklich mal ein konkretes Beispiel interessieren mit etwas Erläuterung dazu. Ich programmiere seit Jahren in diesem "aufgeblähten" Stil, auch weil ich meinen Code später noch verstehe. Bin aber durchaus an tendenziell ökonomischer Programmierung interessiert.

Mal ein Beispiel aus der Praxis: Neulich haben wir auf der Arbeit ein SPS- Programm mit (sehr ökonomischen, aber schwer verstehbaren) Multiinstanzen wieder zurück zu herkömmlicher Programmierung umgestellt. Einfach weil zuvor z.B. ein Schichtelektriker nicht den Hauch einer Chance gehabt hätte, mit dem Programm einen Maschinenfehler zu lokalisieren. Dem ursprünglichen Programmierer macht sicher so leicht keiner was vor und er wird für sein imenses Wissen bestaunt - aber in der Praxis ist er kaum zu gebrauchen, bzw. muss lernen Anwenderfreundlicher zu programmieren.

Wüsste nicht das Anwenderfreundlich Programmieren heißt das der Anwender den Code verstehen muss. Der Anwender soll die Anwendung anwenden und nicht verstehen was dessen Code macht. Oder weißt Du was Der Code des ESP Systems in Deinem Auto macht? Entscheidend ist das Ergebnis. Es macht aber, gerade bei ESP, einen Unterschied ob der Code in 1s oder in 0,2s abgearbeitet wird.
Titel: Antw:Taster soll wert erhöhen / veringern und neu setzen in einem Notify
Beitrag von: fiedel am 24 Februar 2018, 15:30:00
In der Instandhaltung der Industrie ist das wie gesagt komplett anders.
Und auch in der Heimautomatisierung sollte man seinen Code nach Jahren noch verstehen, um mal etwas zu ändern.
Am ESP ist das klar, aber zu Hause ist der Anwender oft gleichzeitig der Programmierer.
Da scheibe ich mir möglichst nicht "{%$&$.&&$//\\}" wenn ich auch "set licht_1 on" schreiben kann...
Es sei denn, ich kreiere gerne ASCII- Art.  ;)