Eine SetFunktion mit Prozentwerten

Begonnen von snowyrain, 28 Dezember 2012, 14:06:28

Vorheriges Thema - Nächstes Thema

snowyrain

Hallo,

ich betreibe am FHEM einen AVR-NET-IO mit einem DAC (LTC1257). Das funktionoert auch soweit alles. Ich möchte jetzt gerne über das WebInterface die Möglickeit haben einen Prozentwert (0,10,20,...,90,100)einzugeben, der zur Heizung gesendet wird. Zurzeit löse ich es so:

adc.classdef:
set setOff cmd {"ltc1257_set 800"}
set set10p cmd {"ltc1257_set 1100"}
set set20p cmd {"ltc1257_set 1400"}
set set30p cmd {"ltc1257_set 1700"}
set set40p cmd {"ltc1257_set 2000"}
set set50p cmd {"ltc1257_set 2300"}
set set60p cmd {"ltc1257_set 2600"}
set set70p cmd {"ltc1257_set 2900"}
set set80p cmd {"ltc1257_set 3100"}
set set90p cmd {"ltc1257_set 3300"}
set setMax cmd {"ltc1257_set 3500"}


Ich hätte jetzt gerne eine set Funktion der ich einen Prozentwert übergeben kann. Diese Funktion soll dann den eigentlichen Wert zum AVT-NET-IO senden.

Ich sellte es mir so vor:
set value {
  if(%value<10){
    set set10p cmd {"ltc1257_set 1100"};
  }
  ...
  elsif(%value<90){
    set set10p cmd {"ltc1257_set 3300"};
  }
  else{
    set setMax cmd {"ltc1257_set 3500"}
  }

}
Ich habe jetzt schon viel gelesen und auch schon viel hinbekommen. das leider nicht. (//images/smiley_icons/icon_sad.gif)

Vielleicht könnt Ihr mir helfen.

Freundliche Grüße

Snowyrain

Tobias

schau dir mal das fhem-wiki zum avr-net-io an. Darin den Abschnitt für die Analogen Eingänge.
Das ECMDDevice Script dadrin kannst du dir umbauen. Das Rechnet in Prozentwerte um.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

snowyrain

Hallo,

für Eingänge (get) wird "postproc" verwendet. Leider wirkt "postproc" immer erst nach der Ausführung. (OK sagt der Name ja bereits ;-) ).
Ich weiß nicht wie ich die cmd-Anweisung erweitern kann. Bereits folgende Anweisung funktioniert nicht.
set setValue cmd {\
  my $val = 1000;;\
}


Ich finde leider keinen Anfang. Ich möchte Euch um etwas Starthilfe bitten.

Mit freundlichem Gruß

Snowyrain

Tobias

ich würde einen Dumy schalten, zb set myDummy 75%

Auf MyDummy ein Notify setzen der die 75% in einen korrekten Wert umrechnet und mit diesen Wert dann das ECMDDevice ansteuern
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

snowyrain

Hallo Tobias,

vielen Dank für den Tipp.

Zitat von: Tobias schrieb am Fr, 28 Dezember 2012 20:18ich würde einen Dumy schalten, zb set myDummy 75% ...

Ich habe in der fhem.cfg ein Dummy-Device erstellt. Mittels des webCmd Kommandos kann ich jetzt direkt auf dem WEB-Interface vorausgewählte Werte setzen. Diese Werte werden in einer notify-Funktion (zuerst überprüft und gerundet und dann) mittels des (FHEM)-Kommandos an den DAC am AVR-NET-IO gesendet. Ich beschäftige mich erst zwei Tage mit FHEM und kann kein PERL Programmieren. Da ist sicherlich noch Verbesserungspotential. Aber es läuft! Vielen Dank.

###Dummy-Device für WEB-Interface
define THERME.dum dummy
attr THERME.dum room Heizungsraum
attr THERME.dum webCmd 0:10:20:30:40:50:60:70:80:90:100

#Teste ob eine positive Zahl übergeben wurde
#Rundet auf eine Stelle VOR dem Komma
#Testet ob der Wert zwischen 0 und 100 ist
#Ruft die Routine auf um den Spannungswert zu setzen
define THERME.dum.ntfy notify THERME.dum.* {\
  my $valtemp = $value{"THERME.dum"};;\
  if ( $valtemp =~ /^\d+$/ ) { \
    $valtemp = sprintf ("%%d", ($valtemp/10) ) * 10 ;;\
    my $val = $valtemp;;\
    my $val2 = "set".$val."p";;\
    if($val<0){\
      Log 1, "Error THERME value -".$val."- to low";;\
      fhem('set THERME set0p');;\
    }\
    elsif($val>100){\
      Log 1, "Error THERME value -".$val."- to high";;\
      fhem('set THERME set0p');;\
    }\
    else{\
      Log 6, "Set THERME -".$val2;;\
      fhem('set THERME '.$val2);;\
    }\
  } else { \
    Log 1, "bad entry ".$valtemp;;\
  }\
}


Vlt. kann's jemand gebrauchen.

Gruß

Snwoyrain