Autor Thema: Update controls_fhem.txt  (Gelesen 1147 mal)

Offline Sidey

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2285
Update controls_fhem.txt
« am: 21 Februar 2019, 22:01:13 »
Hi,

hab mir ein Bein gestellt und jetzt festgestellt, dass ich nicht weiss wie die controls_fhem.txt wirklich generiert wird.
Wobei, mittlerweile weiss ich es doch ein bisschen besser als ich vorher angenommen habe.

Ich habe mir erlaubt einen Konfigurationshash (ca 2000 Zeilen) in eine separate Datei auszulagern.

Den habe ich in das lib Verzeichnis gelegt.
FHEM/lib/signalduino_protocols.hash
Nun ist es aber so, dass diese Datei nicht in der controls_fhem.txt hinterlegt wird, da scheinbar nur definierte Dateitypen berücksichtigt werden.
Das Script, welche die controls_fhem.txt erstellt habe ich im SVN nicht ausfindig machen können.

Wäre es möglich das Script, welches die controls_fhem.txt erzeugt anzupassen?
Ich würde auch einen Patch erstellen, wenn ich wüsste wo ich das Script finde.

Grüße Sidey
Signalduino, HMLan, Raspberry Pi, Mysensors, ESPEasy, HABridge für Echo

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15760
  • s/fhem\.cfg/configDB/g
Antw:Update controls_fhem.txt
« Antwort #1 am: 21 Februar 2019, 22:24:01 »
./contrib/fhemupdate.pl
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.06.2019
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15760
  • s/fhem\.cfg/configDB/g
Antw:Update controls_fhem.txt
« Antwort #2 am: 21 Februar 2019, 22:29:01 »
Wenn Du Deinen hash nach  ./FHEM/firmware/ verlegen würdest, muss man nix am update ändern, das Verzeichnis wird komplett berücksichtigt:

"FHEM/firmware/.*"
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.06.2019

Offline Sidey

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2285
Antw:Update controls_fhem.txt
« Antwort #3 am: 21 Februar 2019, 22:31:37 »
@Betateilchen

Danke für beide hinweise.
Umlegen würde dazu führen, dass ich das Modul anpassen muss, was natürlich ebenso machbar wäre wie den Patch einzuspielen.

In Firmware würde ich so etwas halt nun eher nicht ablegen, weil es keine Firmware ist :)

Grüße Sidey
Signalduino, HMLan, Raspberry Pi, Mysensors, ESPEasy, HABridge für Echo

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15760
  • s/fhem\.cfg/configDB/g
Antw:Update controls_fhem.txt
« Antwort #4 am: 21 Februar 2019, 22:34:15 »
schon klar, es war nur ein Vorschlag für eine schnelle Lösung, die schon mit dem Update morgen früh greifen würde ;)
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.06.2019
Zustimmung Zustimmung x 1 Liste anzeigen

Offline Sidey

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2285
Antw:Update controls_fhem.txt
« Antwort #5 am: 21 Februar 2019, 22:36:29 »
Habe ich auch so verstanden.

Ich war mir auch generell unsicher, ob ich die Datei wirklich dort hinlegen soll, aber naja, es schien irgendwie passend.
Ich könnte die Datei auch dynamisch aus dem Internet nachladen, das war mit aber dann doch erst mal zu aufwändig.
Signalduino, HMLan, Raspberry Pi, Mysensors, ESPEasy, HABridge für Echo

Offline Ralf9

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2324
Antw:Update controls_fhem.txt
« Antwort #6 am: 21 Februar 2019, 22:51:56 »
warum muß eigentlich die Endung bei einem Perl hash unbedingt .hash sein, wäre da .pm nicht passender?

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module
SIGNALduino

Offline Sidey

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2285
Antw:Update controls_fhem.txt
« Antwort #7 am: 21 Februar 2019, 22:56:35 »
Ich habe auf die Schnelle keine Spezifikation gefunden, wann etwas ein Perl Modul ist und wann nicht, aber es erscheint mir offensichtlich, dass ein Hash kein PerlModul ist, welches via use oder require geladen wird.



Grüße Sidey
Signalduino, HMLan, Raspberry Pi, Mysensors, ESPEasy, HABridge für Echo

Offline Ralf9

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2324
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module
SIGNALduino

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20210
Antw:Update controls_fhem.txt
« Antwort #9 am: 22 Februar 2019, 09:48:33 »
Ich wuerde die Datei so modifizieren, dass die Daten einer Variable zugewiesen werden (analog zu HMCCUConf.pm) und sie in FHEM/lib/signalduino_protocols.pm umbenennen. Dann kann man die Datei mit use laden, die Leute stellen keine bloede Fragen, und man muss im Framework keine Ausnahmen einbauen.

Offline Sidey

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2285
Antw:Update controls_fhem.txt
« Antwort #10 am: 22 Februar 2019, 21:08:39 »
Ich wuerde die Datei so modifizieren, dass die Daten einer Variable zugewiesen werden (analog zu HMCCUConf.pm) und sie in FHEM/lib/signalduino_protocols.pm umbenennen. Dann kann man die Datei mit use laden, die Leute stellen keine bloede Fragen, und man muss im Framework keine Ausnahmen einbauen.

Hi Rudi,

ich habe die Daten einer Variable zugewiesen. Das funktioniert prinzipiell auch bereits seit Monaten. Nur leider wird die Datei nicht über den Update Befehl geladen.

Dein Vorschlag ist jetzt, dass ich mich von einer bewährten Methode des ladens von Daten aus einer Datei in einen Hash verabschieden soll.

sub SIGNALduino_LoadProtocolHash($)
{

if (! -e $_[0]) {
return %{ {"error" => "File does not exsits"}};
}

my $protocol_data = do {
open my $fh, '<', $_[0] ;
local $/; # Undefine $/ for this scope...
    <$fh>;    # so <> slurps up the entire file
};

my %evalret= eval $protocol_data ;
if (!%evalret) {
return %{ {"error" => $@}};
}
return %evalret;
}

Wie ich das nun mit use oder require hinbekomme eine Datei mit variablen Namen laden zu können müsste ich noch prüfen.
So wie ich HMCCUConf verstanden habe, wird dort ein Package definiert in dem wiederum die Variablen definiert sind. Um diese dann im Modul verwenden zu können, wird eine Variable im Modul als Referenz auf die Variable im Package angelegt.



Was die Ausnahmen des Frameworks angeht, verstehe ich die Regel aktuell leider nicht :-( .

Es gibt Verzeichnisse, in denen ist der Beginn des Dateinamens entscheidend. Z.B.:
"FHEM/FhemUtils/update-.*",

Es gibt Verzeichnisse, in denen ist alles erlaubt. Z.B.:
  "FHEM/firmware/.*",
  "FHEM/lib/SWAP/panStamp/.*",
  "FHEM/lib/SWAP/justme/.*",
  "www/pgm2/.*",
  "www/codemirror/.*",

Und dann gibt es noch Verzeichnisse in denen sind nur manche Dateiendungen erlaubt. Z.B:
  "FHEM/lib/.*.pm",
  "FHEM/lib/.*.xml",
  "FHEM/lib/.*.csv",
  "www/images/fhemSVG/.*.svg",

Was ist denn jetzt hier genau die Regel des Frameworks von der ich abweiche?

Wenn ich die Daten jetzt in einem JSON File speichern würde. Wäre es dann okay?

.gz Dateien liegen heute auch bereits im FHEM/lib/ Verzeichnis, aktualisieren lassen die sich aber wohl auch nicht.

Grüße Sidey
« Letzte Änderung: 22 Februar 2019, 21:10:13 von Sidey »
Signalduino, HMLan, Raspberry Pi, Mysensors, ESPEasy, HABridge für Echo

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20210
Antw:Update controls_fhem.txt
« Antwort #11 am: 22 Februar 2019, 21:50:50 »
Zitat
Was ist denn jetzt hier genau die Regel des Frameworks von der ich abweiche?
Du willst eine Datei mit dem Namen .hash anlegen, und damit waerst du die Erste.
Deine Methode des Ladens ist auch unkonventionell.

Es reicht, wenn du deine Datei "FHEM/lib/signalduino_protocols.pm" nennst, vor dem ersten Klammer
use vars qw(%signalduino_protocols);
%signalduino_protocols =
schreibst, und die Datei mitrequire "lib/signalduino_protocols.pm";reinliest. Danach hast du Zugriff auf %signalduino_protocols.

Zitat
.gz Dateien liegen heute auch bereits im FHEM/lib/ Verzeichnis, aktualisieren lassen die sich aber wohl auch nicht.
Hast Du dafuer ein Beleg?

Offline Sidey

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2285
Antw:Update controls_fhem.txt
« Antwort #12 am: 22 Februar 2019, 22:33:50 »
Ich habe mir diesen Weg zwar nicht selbst ausgedacht, aber es mag sein, dass es unkonventionell ist.

Ich bau mir erst mal einen kleinen Workaround. Das Laden via require muss ich mir genauer ansehen, ob das funktioniert.
Es ist halt nicht in allen Fällen die gleiche Datei die geladen werden soll, aber das ist mein Problem. Dazu muss ich mir erst mal die Karten legen.

Grüße Sidey
Signalduino, HMLan, Raspberry Pi, Mysensors, ESPEasy, HABridge für Echo

Offline Ralf9

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2324
Antw:Update controls_fhem.txt
« Antwort #13 am: 23 Februar 2019, 11:25:07 »
Zitat
Es reicht, wenn du deine Datei "FHEM/lib/signalduino_protocols.pm" nennst, vor dem ersten Klammer
use vars qw(%signalduino_protocols);
%signalduino_protocols =

Ich habe es damit mal versucht
In die signalduino_protocols.pm habe ich folgendes eingetragen:
package signalduino_protocols;
use vars qw(%ProtocolListSIGNALduino);
%ProtocolListSIGNALduino  = (

In die  00_SIGNALduino.pm habe ich folgendes eingetragen:
require "lib/signalduino_protocols.pm";
my %ProtocolListSIGNALduino = %signalduino_protocols::ProtocolListSIGNALduino;

Bis auf ein paar Ausnahmen funktioniert es damit.

"18" => ## Oregon Scientific v1
{
name => 'Oregon Scientific v1',
comment => 'temperature / humidity or other sensors',
id          => '18',
...
method          => \&SIGNALduino_OSV1   # Call to process this message
},
"35" => ## Homeeasy
{
name => 'HE800',
comment => 'Homeeasy',
id          => '35',
...
postDemodulation => \&SIGNALduino_HE800,
},

Damit
    my $method = $ProtocolListSIGNALduino{$id}{method};
    if (!exists &$method)
{
Log3 $name, 5, "$name: Error: Unknown function=$method. Please define it in file $0";
} else {
my ($rcode,$res) = $method->($name,$bitData,$id,$mcbitnum);
stürzt fhem mit folgender Fehlermeldung ab:
Undefined subroutine &signalduino_protocols::SIGNALduino_OSV1 called at ./FHEM/00_SIGNALduino.pm ...
und damit funktioniert es auch nicht:
($rcode,@retvalue) = SIGNALduino_callsub('postDemodulation',$ProtocolListSIGNALduino{$id}{postDemodulation},$name,@bit_msg);

sub SIGNALduino_callsub
{
my $funcname =shift;
my $method = shift;
my $name = shift;
my @args = @_;

if ( defined $method && defined &$method )   
{
#my $subname = @{[eval {&$method}, $@ =~ /.*/]};
Log3 $name, 5, "$name: applying $funcname, value before: @args"; # method $subname";

my ($rcode, @returnvalues) = $method->($name, @args) ;


Gruß Ralf




FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module
SIGNALduino

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20210
Antw:Update controls_fhem.txt
« Antwort #14 am: 23 Februar 2019, 12:58:15 »
Gibt es einen Grund, warum du in dieser Version auf package ("package signalduino_protocols;") bestehst?
In der .hash Version hast du es nicht verwendet, wenn du es haben willst, dann musst du es konsequent durchziehen.