FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: franky08 am 07 Januar 2016, 15:30:45

Titel: [gelöst] ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: franky08 am 07 Januar 2016, 15:30:45
Hallo, kann mir jemand auf die Sprünge helfen? Folgende ltc1257 ist gegeben:

# Umsetzung in ECMD Befehle
# Ein Uebergabeparameter -> Sollwert
set setDAC params dacValue
set setDAC cmd {"ltc1257_set %dacValue\n"}
set setDAC expect "OK\n"
# Keine Uebergabeparameter
set init cmd {"ltc1257_init\n"}
set init expect "OK\n"
#


Jetzt möchte ich gerne den Wert von %dacValue in das dummy DAC_Wert schreiben, leider klappt eine Erweiterung des classdef Codes um:

{
my $wert = %dacValue;
fhem "set DAC_Wert $wert";
}


nicht.
Kann mich jemand erleuchten?

VG
Frank
Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: Dr. Boris Neubert am 07 Januar 2016, 20:13:46
Bitte http://forum.fhem.de/index.php/topic,25748.0.html (http://forum.fhem.de/index.php/topic,25748.0.html) beachten.
Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: franky08 am 07 Januar 2016, 20:51:29
Ja, was soll ich davon beachten? Meine Frage zielte darauf ab ob man %dacValue (ist ja der Sollwert) dem String $wert zugewiesen werden kann. Habe jetzt versucht in meinen 3 Perl Büchern darüber etwas zu finden, lande aber immer bei dem Modulo Operator.
%dacValue ist ja durch die classdef vorgegeben, diese funktioniert auch (Heizungssteuerung Junkers Stetigregelung), die Steuergröße dacValue wird in einer sub (Abhängig von Ist/Soll Raumtemperatur, Außentemperatur und Anstieg) berechnet.
Über ADC sehe ich zwar mit wieviel Prozent der Brenner läuft aber ich hätte gerne, zur Optimierung, gesehen mit welchem Wert der DAC gerade angesteuert wird.
Im Einsatz ist das Pollin AVR IO Board mit Ethersex sowie ein LTC1257 welcher einen LM358 ansteuert. Der LM358 stellt die Steuerspannung (0-22V) für die Heizung bereit.

ECMD define:
define AVRNETIO ECMD telnet 192.168.2.111:2701
attr AVRNETIO DbLogExclude .*
attr AVRNETIO classdefs LTC1257=/opt/fhem/ltc1257_neu.classdef:ADC=/opt/fhem/adc3.classdef
attr AVRNETIO requestSeparator �
attr AVRNETIO room ECMD,HM-Adapter,System


DAC define:
define DAC ECMDDevice LTC1257
attr DAC DbLogExclude .*
attr DAC IODev AVRNETIO
attr DAC room ECMD,Unsorted


ltc1257.classdef:
# Umsetzung in ECMD Befehle
# Ein Uebergabeparameter -> Sollwert
set setDAC params dacValue
set setDAC cmd {"ltc1257_set %dacValue\n"}
set setDAC expect "OK\n"
# Keine Uebergabeparameter
set init cmd {"ltc1257_init\n"}
set init expect "OK\n"
#




VG
Frank
Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: Dr. Boris Neubert am 07 Januar 2016, 21:07:43
Ich hätte gerne das Log gesehen (Hinweise im angehefteten Beitrag beachten) und zwar konkret die Einträge in Bezug auf das postproc aus dem Eingangsbeitrag. Ist das aus dem angehefteten Beitrag nicht ersichtlich?

Möglicherweise fehlen Dir aber nur die \ zur Verkettung der Zeilen aus dem postproc.

Viele Grüße
Boris
Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: franky08 am 07 Januar 2016, 21:14:49
OK, da müsste ich verbose wieder hochdrehen z.Zt. wird da nichts geloggt, wie gesagt es funktioniert alles ich brauchte nur die in der ltc1257.classdef übergebenen Stellgröße dacValue in einem dummy device.
Muss ich jetzt warten bis die Heizung wieder anspringt um den Log. zu posten.

VG
Frank
Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: franky08 am 07 Januar 2016, 21:26:54
Der Log:
2016.01.07 21:22:40 5: Cmd: >set DAC setDAC 2730<
2016.01.07 21:22:40 5: ECMDDevice: Analyze command >{"ltc1257_set 2730\n"}<
2016.01.07 21:22:40 5: AVRNETIO: sending command "ltc1257_set 2730\n"
2016.01.07 21:22:40 5: SW: 6c7463313235375f73657420323733300a
2016.01.07 21:22:40 5: AVRNETIO: received answer "OK\n"
2016.01.07 21:22:40 5: Triggering DAC (2 changes)
2016.01.07 21:22:40 5: Notify loop for DAC setDAC: OK


VG
Frank
Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: Dr. Boris Neubert am 07 Januar 2016, 21:42:04
So, und jetzt hast Du ein reading "setDAC" am Device "DAC" und da steht "OK\n" drin, nicht wahr?

Und es soll 2730, also der Wert in %dacValue drinstehen, nicht wahr?

Grüße
Boris
Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: franky08 am 07 Januar 2016, 21:49:53
Ja, das wäre schön  :)

VG
Frank
Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: Dr. Boris Neubert am 07 Januar 2016, 22:08:20
Ohne es ausprobiert zu haben: ergänze die Klassendefinition doch einmal um

set setDAC postproc { "%dacValue" }

Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: franky08 am 07 Januar 2016, 22:15:10
Ich danke dir Boris, probieren kann ich das erst morgen, eine Änderung der classdef bedingt ja einen Neustart oder rereadconfig, kann ich iMo nich machen.
Melde mich morgen, ob es funktioniert hat.

Vielen Dank
Frank
Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: franky08 am 07 Januar 2016, 22:27:20
Hab es eben schnell noch probieren können, leider funktioniert es nicht, im STATE steht:

STATE setDAC %dacValue
Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: franky08 am 08 Januar 2016, 18:28:18
Vlt. könnte man nach setDAC mittels setreading ein neues Reading in das device schreiben?

set setDAC params dacValue; setreading DAC value %dacValue

P.S. das funktioniert leider auch nicht
2016.01.08 18:40:50 3: set DAC setDAC 2280 : Wrong number of parameters.

VG
Frank
Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: Dr. Boris Neubert am 08 Januar 2016, 19:56:32
Zitat von: franky08 am 07 Januar 2016, 22:27:20
Hab es eben schnell noch probieren können, leider funktioniert es nicht, im STATE steht:

STATE setDAC %dacValue

Probier das bitte mal mit der überarbeiteten Version aus der Anlage aus.

Grüße
Boris
Titel: Antw:ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: franky08 am 08 Januar 2016, 20:37:47
Klasse Boris, funktioniert!
DEF        LTC1257
   IODev      AVRNETIO
   NAME       DAC
   NR         1528
   STATE      setDAC 2280
   TYPE       ECMDDevice
   CHANGETIME:
   Readings:
     2015-08-18 21:49:58   init            OK
     2016-01-08 20:36:30   setDAC          2280
     2016-01-08 20:36:30   state           setDAC 2280
   Fhem:
     classname  LTC1257
     Cache:
       Specials:
         %NAME      DAC
         %TYPE      ECMDDevice
Attributes:
   DbLogExclude .*
   IODev      AVRNETIO
   room       ECMD,Unsorted
   verbose    0


VG
Frank
Titel: Antw:[gelöst] ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: franky08 am 09 Januar 2016, 12:07:56
Leider kam heute mit dem update 67_ECMDDevice.pm wahrscheinlich die Datei ohne deine Änderung. Habe erst einmal global exclude from update 67_ECMDDevice.pm gesetzt.

VG
Frank
Titel: Antw:[gelöst] ltc1257 %dacValue aus classdef in dummy schreiben
Beitrag von: Dr. Boris Neubert am 09 Januar 2016, 13:11:14
Ist auch noch nicht eingecheckt / ich habe noch ein paar kleine Änderungen vor.
bn