Hallo,
ich will von einem Arduino mit EthernetShield mit FHEM kommunizieren. Das funktioniert über Telnet bereits sehr gut.
Leider wird auf dem Mikrokontroler der Platz knapp. Deswegen würde ich gern die Dummys mit einem Alternativen Name ansprechen. Mal ein Beispiel:
define HKRuecklaufTemp2 dummy
attr HKRuecklaufTemp2 ID 28 C8 B1 EB 3 0 0 9B
Im Moment schicke ich als erstes
{"<OWA1=".AttrVal("HKRuecklaufTemp2","ID","0 0 0 0 0 0 0 0").">" }
und bekomme zurück
<OWA1=28 C8 B1 EB 3 0 0 9B>
oder ich setze den Wert vom OneWireBus mit
set HKRuecklaufTemp2 29.7
Dazu muß ich aber immer den Name als String im Arduino vorrätig haben.
Lieber wäre es mir wenn ich FHEM irgendwie beibringen könnte das "Val01" das gleiche ist wie "HKRuecklaufTemp2".
Val ist ein fester Wert, 01 der Index in dem Array das ich sowieso habe.
set Val01 29.7
Bei derzeit 45 Datenpunkten wären damit ettliche Bytes gespart.
Ich habe schon mit cmdalias probiert.
Das folgende funktioniert:
define V01alias cmdalias set Val01 .* AS set HKRuecklaufTemp2 $EVTPART1
Allerdings wären das für Adresse holen + set ja im moment schon 90 aliase und ich habe noch einige Ideen.
Hat jemand einen Tipp wie ich das besser umsetzen könnte?
rename HKRuecklaufTemp2 Val01
und für die "Optik" im Frontend kannst Du danach
attr Val01 alias HKRuecklaufTemp2
setzen.
Diese Idee hatte ich auch als erstes. Mir hat aber nicht gefallen das ich dann ja auch in FHEM immer die wenig aussagekräftigen Kurznamen verwenden müsste. Ausserdem habe ich mir Sorgen gemacht wass dann mit den Diagrammen passiert. Auch die Historie im dblog wird ja vermutlich nicht mit umbenannt.
Dann hatte ich die Idee eine Sub zu schreiben der ich Parameternummer und Wert übergebe. Dazu müsste man mal Perl lernen.
Als 3. Weg habe ich dann mit cmdalias probiert. Das gefiel mir eigentlich am besten, nur kriege ich das irgendwie nicht allgemein genug formuliert. Eigentlich will ich ja nur in jedem Befehl der rein kommt Valxx durch den echten Namen ersetzen.
Danke für Deine Hilfe