Neues Modul: 72_TA_CMI_JSON (Technische Alternative UVR16x2, UVR1611, CMI, ...)

Begonnen von delMar, 02 November 2018, 10:38:08

Vorheriges Thema - Nächstes Thema

delMar

Hallo,

das Modul für das CMI der Firma Technische Alternative ist nun offizieller Bestandteil des SVN.
72_TA_CMI_JSON

Danke an alle Tester und Feedback Geber!

Bisherige Diskussionen zu dem Thema gab es hier https://forum.fhem.de/index.php/topic,41439.0.html und hier https://forum.fhem.de/index.php/topic,13534.0.html.

Allfällige Fragen sollten im Wiki beantwortet sein: https://wiki.fhem.de/wiki/TA_CMI_UVR16x2_UVR1611
Alle weiteren Fragen zum Modul künftig bitte hier rein.


Danke!
schöne Grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

GrazPi

Hallo Martin,
vielen Dank für das Modul, funktioniert sehr gut!
Ich habe eine UVR16x2 als Node 2, die über die Query-Parameter La und Ld (Logging Analog und Digital) deutlich mehr Daten bereitstellt.
Gemäss der von dir genutzten API-Doku von TA habe ich mal einen direkten Aufruf jeweils für La und Ld gestartet:

http://ip/INCLUDE/api.cgi?jsonnode=2&jsonparam=La

{ "Header":{ "Version":3, "Device":"87", "Timestamp":1541181091 }, "Data":{ "Logging Analog":[
{ "Number":1, "AD":"A", "Value":{ "Value":21.8, "Unit":"1" } },
{ "Number":2, "AD":"A", "Value":{ "Value":24.6, "Unit":"1" } },
{ "Number":3, "AD":"A", "Value":{ "Value":28.5, "Unit":"1" } },
{ "Number":4, "AD":"A", "Value":{ "Value":24.6, "Unit":"1" } },
{ "Number":5, "AD":"A", "Value":{ "Value":30.2, "Unit":"1" } },
{ "Number":6, "AD":"A", "Value":{ "Value":11.5, "Unit":"1" } },
{ "Number":7, "AD":"A", "Value":{ "Value":42.1, "Unit":"1" } },
{ "Number":8, "AD":"A", "Value":{ "Value":229.7, "Unit":"1" } },
{ "Number":9, "AD":"A", "Value":{ "Value":55.2, "Unit":"1" } },
{ "Number":10, "AD":"A", "Value":{ "Value":30.6, "Unit":"1" } },
{ "Number":11, "AD":"A", "Value":{ "Value":20.8, "Unit":"46", "RAS":"0" } },
{ "Number":12, "AD":"A", "Value":{ "Value":29.3, "Unit":"1" } },
{ "Number":13, "AD":"A", "Value":{ "Value":31.9, "Unit":"1" } },
{ "Number":14, "AD":"A", "Value":{ "Value":32.0, "Unit":"1" } },
{ "Number":15, "AD":"A", "Value":{ "Value":0.0, "Unit":"8" } },
{ "Number":16, "AD":"A", "Value":{ "Value":0.0, "Unit":"8" } },
{ "Number":17, "AD":"A", "Value":{ "Value":0, "Unit":"0" } },
{ "Number":21, "AD":"A", "Value":{ "Value":0.00, "Unit":"10" } },
{ "Number":22, "AD":"A", "Value":{ "Value":2513.6, "Unit":"11" } },
{ "Number":23, "AD":"A", "Value":{ "Value":0.00, "Unit":"10" } },
{ "Number":24, "AD":"A", "Value":{ "Value":7729.2, "Unit":"11" } },
{ "Number":25, "AD":"A", "Value":{ "Value":0.22, "Unit":"13" } },
{ "Number":26, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":27, "AD":"A", "Value":{ "Value":39.4, "Unit":"1" } },
{ "Number":28, "AD":"A", "Value":{ "Value":29.0, "Unit":"1" } },
{ "Number":29, "AD":"A", "Value":{ "Value":35.9, "Unit":"1" } }
]}, "Status":"OK", "Status code":0 }

http://ip/INCLUDE/api.cgi?jsonnode=2&jsonparam=Ld

{ "Header":{ "Version":3, "Device":"87", "Timestamp":1541188144 }, "Data":{ "Logging Digital":[
{ "Number":1, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":2, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":3, "AD":"D", "Value":{ "Value":1, "Unit":"43" } },
{ "Number":4, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":5, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":6, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":7, "AD":"D", "Value":{ "Value":1, "Unit":"43" } },
{ "Number":8, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":9, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":10, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":11, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":12, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":13, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":14, "AD":"D", "Value":{ "Value":0, "Unit":"43" } },
{ "Number":15, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }
]}, "Status":"OK", "Status code":0 }


Es müsste dafür also die Readings  readingNamesLa readingnamesLd geben - kannst du das einbauen? Ich teste auch sehr gerne!
Nur eine Nice-to-have-Frage: Alle Werte schicken auch ihre Maßeinheit als Unit-Kodierung mit die in der TA-Doku aufgeschlüsselt sind - kann man das auch irgendwie in dem Modul auswerten? Das ist sicher komplexer da für jeden Schlüssel zwei Werte Value und UoM zurückgeliefert werden müssen - ist das machbar?

Nochmals vielen Dank für deine Arbeit!
Beste Grüsse, Lutz



FHEM prod auf RazBerry 3, Dev auf virtuellem RasPi

delMar

Hi Lutz

danke für dein Feedback!

Zitat von: GrazPi am 02 November 2018, 22:38:09
Es müsste dafür also die Readings  readingNamesLa readingnamesLd geben - kannst du das einbauen? Ich teste auch sehr gerne!
Ja, das werd ich machen.

Zitat von: GrazPi am 02 November 2018, 22:38:09
Nur eine Nice-to-have-Frage: Alle Werte schicken auch ihre Maßeinheit als Unit-Kodierung mit die in der TA-Doku aufgeschlüsselt sind - kann man das auch irgendwie in dem Modul auswerten? Das ist sicher komplexer da für jeden Schlüssel zwei Werte Value und UoM zurückgeliefert werden müssen - ist das machbar?
Ich hab schon daran gedacht, wollte aber nix bauen was keiner brauchen kann. Ist somit widerlegt. :)

Ich kann ein zusätzliches Reading mit der Einheit machen (zb Reading_Name_Unit).
Und noch eine vollständige Variante zb in Reading_Name_Pretty.
Und damit das niemand stört, der es gerne aufgeräumt hat, beides noch per Attribut konfigurierbar.
Sollte sich einfach machen lassen.

Schöne Grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

delMar

Hallo Lutz,

ich hab auf die Schnelle jetzt mal die readingNames Attribute für Logging Analog und Digital reingegeben.
Bitte mal von GitHub holen und testen, ob das so funktioniert.
https://raw.githubusercontent.com/delMar43/FHEM/master/72_TA_CMI_JSON.pm

Wenn ich etwas mehr Zeit habe, werde ich auch noch das mit den Einheiten einbauen.
Außerdem hab ich gesehen, dass gut dokumentiert ist, welche Werte auf welchen Geräten verfügbar sind (es kam in einem der vorigen Threads die Frage auf , warum auf einer 1611 keine DL-Bus Werte kommen --> weil das laut Doku auch nicht unterstützt ist).
Falls also jemand Readings konfiguriert, die auf diesem Gerät nicht unterstützt werden, kann ich eine entsprechende Log Message ausgeben.

Benötigst du RAS auch? (nur für Readings mit Unit 46 verfügbar)
Den Wert würde ich dann als Reading_Name_RAS ausgeben.

Wenn jemand weitere Werte, zB für die UVR1611 benötigt, mach ich das gern. Ich brauche aber die JSON Struktur, damit ich weiß, unter welchem JSON-Knoten die Werte abgelegt sind (zB "Logging Analog").
Danke hier für die gute Vorarbeit, Lutz.

schöne Grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

GrazPi

Hallo Martin,
vielen Dank für deine schnelle Reaktion! Ich habe mir das Modul direkt von deinem Link heruntergeladen und konfiguriert - es zeigt aber keine Parameter an.
Das Modul zeigt  $Id: 72_TA_CMI_JSON.pm 17662 2018-11-02 14:40:28Z delmar $ - ist das das richtige - da von gestern?
Die von mir gestern eingefügten direkten API-Abfragen hatte ich vorher mit einigen <CRLF> besser lesbar gemacht, raw sehen sie so aus (Nur falls das zur Formatverwirrung geführt hat):
http://ip/INCLUDE/api.cgi?jsonnode=2&jsonparam=La

{ "Header":{ "Version":3, "Device":"87", "Timestamp":1541266759 }, "Data":{ "Logging Analog":[ { "Number":1, "AD":"A", "Value":{ "Value":18.4, "Unit":"1" } }, { "Number":2, "AD":"A", "Value":{ "Value":23.2, "Unit":"1" } }, { "Number":3, "AD":"A", "Value":{ "Value":26.2, "Unit":"1" } }, { "Number":4, "AD":"A", "Value":{ "Value":23.6, "Unit":"1" } }, { "Number":5, "AD":"A", "Value":{ "Value":28.4, "Unit":"1" } }, { "Number":6, "AD":"A", "Value":{ "Value":9.8, "Unit":"1" } }, { "Number":7, "AD":"A", "Value":{ "Value":42.1, "Unit":"1" } }, { "Number":8, "AD":"A", "Value":{ "Value":227.0, "Unit":"1" } }, { "Number":9, "AD":"A", "Value":{ "Value":55.1, "Unit":"1" } }, { "Number":10, "AD":"A", "Value":{ "Value":29.3, "Unit":"1" } }, { "Number":11, "AD":"A", "Value":{ "Value":20.8, "Unit":"46", "RAS":"0" } }, { "Number":12, "AD":"A", "Value":{ "Value":30.6, "Unit":"1" } }, { "Number":13, "AD":"A", "Value":{ "Value":30.5, "Unit":"1" } }, { "Number":14, "AD":"A", "Value":{ "Value":30.4, "Unit":"1" } }, { "Number":15, "AD":"A", "Value":{ "Value":0.0, "Unit":"8" } }, { "Number":16, "AD":"A", "Value":{ "Value":0.0, "Unit":"8" } }, { "Number":17, "AD":"A", "Value":{ "Value":0, "Unit":"0" } }, { "Number":21, "AD":"A", "Value":{ "Value":0.00, "Unit":"10" } }, { "Number":22, "AD":"A", "Value":{ "Value":2514.2, "Unit":"11" } }, { "Number":23, "AD":"A", "Value":{ "Value":0.00, "Unit":"10" } }, { "Number":24, "AD":"A", "Value":{ "Value":7729.7, "Unit":"11" } }, { "Number":25, "AD":"A", "Value":{ "Value":0.22, "Unit":"13" } }, { "Number":26, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":27, "AD":"A", "Value":{ "Value":41.6, "Unit":"1" } }, { "Number":28, "AD":"A", "Value":{ "Value":29.8, "Unit":"1" } }, { "Number":29, "AD":"A", "Value":{ "Value":38.3, "Unit":"1" } }]}, "Status":"OK", "Status code":0 }

http://groeschner/INCLUDE/api.cgi?jsonnode=2&jsonparam=Ld

{ "Header":{ "Version":3, "Device":"87", "Timestamp":1541267152 }, "Data":{ "Logging Digital":[ { "Number":1, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":2, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":3, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":4, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":5, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":6, "AD":"D", "Value":{ "Value":1, "Unit":"43" } }, { "Number":7, "AD":"D", "Value":{ "Value":1, "Unit":"43" } }, { "Number":8, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":9, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":10, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":11, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":12, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":13, "AD":"D", "Value":{ "Value":1, "Unit":"43" } }, { "Number":14, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }, { "Number":15, "AD":"D", "Value":{ "Value":0, "Unit":"43" } }]}, "Status":"OK", "Status code":0 }


Das RAS ("Raumtemperaturabhängige Steuerung") eigentlich die Stellung des Drehschalters am der kleinen Bedieneinheit an - die Info kann sehr helfen falls dort jemand das ganze Haus auf "Frostschutz" abgesenkt hat ;-)
Die Maßeinheiten wären gut zu haben - um die Werte sicher korrekt zu verstehen und auch um zu erkennen ob man tatsächlich im Wert 9 Einte Temperatur und keine Drehzahl liest.
Kannst du nochmal schauen was genau unter https://raw.githubusercontent.com/delMar43/FHEM/master/72_TA_CMI_JSON.pm liegt?

Vielen Dank,
Lutz

FHEM prod auf RazBerry 3, Dev auf virtuellem RasPi

GrazPi

Hallo Martin,
sehe gerade daß das Modul von FHEM nicht geladen wird. Nach dem shutown restart zeigte das Logfile PERL WARNING: Use of uninitialized value $readingValue in concatenation (.) or string at ./FHEM/72_TA_CMI_JSON.pm line 235.
Ein "reload 72_TA_CMI_JSON" zeigt:
ZitatToo many arguments for main::TA_CMI_JSON_extractReadings at ./FHEM/72_TA_CMI_JSON.pm line 160, near "'Inputs') "
Too many arguments for main::TA_CMI_JSON_extractReadings at ./FHEM/72_TA_CMI_JSON.pm line 161, near "'Outputs') "
Too many arguments for main::TA_CMI_JSON_extractReadings at ./FHEM/72_TA_CMI_JSON.pm line 162, near "'DL-Bus') "
Too many arguments for main::TA_CMI_JSON_extractReadings at ./FHEM/72_TA_CMI_JSON.pm line 163, near "'Logging Analog') "
Too many arguments for main::TA_CMI_JSON_extractReadings at ./FHEM/72_TA_CMI_JSON.pm line 164, near "'Logging Digital') "

Ich hatte zur Kontrolle noch ein Input-Reading T_KOLL konfiguriert, das funktioniert seltsamerweise
Hier das Device-Listing: Internals:
   CAN_DEVICE UVR16x2
   CMIURL     <ip>
   CMI_API_VERSION 1.28.0 2017-11-09
   DEF        <ip> 2 La,Ld,I1
   INTERVAL   120
   NAME       cmitest
   NODEID     2
   NR         67
   QUERYPARAM La,Ld,I1
   STATE      OK
   TYPE       TA_CMI_JSON
   OLDREADINGS:
   READINGS:
     2018-11-03 18:39:01   T_KOLL          16.3
     2018-11-03 18:36:59   state           OK
Attributes:
   interval   120
   password   xxxxxxx
   readingNamesInputs 1:T_KOLL
   readingNamesLoggingAnalog 1:T_Kollektor 2:T_NachSolWTausch 3:T_600_Unten 4:T_SolPrimNachWT_Zu100 5:T_100Unten 6:T_Aussen 7:T_VomBrenner 8:T_ZumBrenner 9:T_600_Oben 10:T_600_Mitte 11:T_WoZi 12:T_ZurFBHzg 13:T_NachHzg 14:T_NachHzgRLAnheb 15:Proz_PumpeSolPrim 16:Proz_PumpeSolSekndr 17:AnfordBrennerHzg 18:WZ-Tag100 19:WZ-Gesamt100 20:WZ_Tag600 21:WZ_Gesamt600 22:AnfordBrenner_WW 23:T_ZuHeizkoerper 24:T_ZuFBHzg 25:HzgVeriegelung
   readingNamesLoggingDigital 1:O_Brenner 2:PumpeFBHzg 3:Ventil_Zum100 4:UmschVentil_Hzg_WW 5:AnfordKessel 6:Misch_HzgOGAuf 7:Misch_HzgOGAb 8:Misch_RLAnhebAuf 9:Misch_RLAnhebAb 10:Wartung 11:OAnfordBrenner 12:Schornsteinf
   room       Testbude
   username   yyyyyyy


Beste Grüße,
Lutz
FHEM prod auf RazBerry 3, Dev auf virtuellem RasPi

delMar

ah sorry.
perl ist noch nicht so meine stärke.
ich seh was das problem ist. werde versuchen heute noch ein update einzuspielen

gruß
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

CoolTux


sub TA_CMI_JSON_extractDeviceName($) {
  my ($input) = @_;

  my $result;
  if ($input eq '80') {
    $result = 'UVR1611';
  } elsif ($input eq '87') {
    $result = 'UVR16x2';
  } elsif ($input eq '88') {
    $result = 'RSM610';
  } elsif ($input eq '89') {
    $result = 'CAN-I/O45';
  } elsif ($input eq '8B') {
    $result = 'CAN-EZ2';
  } elsif ($input eq '8C') {
    $result = 'CAN-MTx2';
  } elsif ($input eq '8D') {
    $result = 'CAN-BC2';
  } else {
    $result = "Unknown: $input";
  }

  return $result;
}

sub TA_CMI_JSON_extractVersion($) {
  my ($input) = @_;
 
  my $result;
  if ($input == 1) {
    $result = '1.25.2 2016-12-12';
  } elsif ($input == 2) {
    $result = '1.26.1 2017-02-24';
  } elsif ($input == 3) {
    $result = '1.28.0 2017-11-09';
  } else {
    $result = "unknown: $input";
  }
 
  return $result;
}



Übersichtlicher und flexibler  ;)

my %deviceNames = (
    '80' => 'UVR1611',
    '87' => 'UVR16x2',
    '88' => 'RSM610',
    '89' => 'CAN-I/O45',
    '8B' => 'CAN-EZ2',
    '8C' => 'CAN-MTx2',
    '8D' => 'CAN-BC2'
);

my %versions = (
    1 => '1.25.2 2016-12-12',
    2 => '1.26.1 2017-02-24',
    3 => '1.28.0 2017-11-09'
);


sub TA_CMI_JSON_extractDeviceName($) {
    my ($input) = @_;
    return (defined($deviceNames{$input}) ? $deviceNames{$input} : 'unknown: ' . $input);
}

sub TA_CMI_JSON_extractVersion($) {
    my ($input) = @_;
    return (defined($versions{$input}) ? $versions{$input} : 'unknown: ' . $input);
}



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

delMar

Zitat von: CoolTux am 03 November 2018, 19:40:57
Übersichtlicher und flexibler  ;)
Danke CoolTux!
Ich mach seit 15 Jahren Java und habe kiloweise Java-code gesehen, der von C Entwicklern geschrieben wurde. Genauso muss sich mein Perl-Code für euch anfühlen :-)
Es sind aber genau Hinweise wie dieser, die diese feinen Unterschiede herausarbeiten. Danke, werd ich beim nächsten SVN-update berücksichtigen.

Zitat von: GrazPi am 03 November 2018, 18:42:20
Ein "reload 72_TA_CMI_JSON" zeigt:
Ich mach immer ein komplettes restart von FHEM, wenn ich ein neues Modul hinzufüge.
Ist vielleicht auf einem Produktiven System nicht immer so lustig, beseitigt aber so manchen Zweifel
A propos Zweifel: ich hab das bei mir Lokal natürlich auch getestet und hab die Meldung von wegen "too many arguments" nicht bekommen. Sonst hätte ich dir diesen Schrott nicht zugemutet.
Wer weiß, woran das hängt? Perl version?

Zitat von: GrazPi am 03 November 2018, 18:42:20
Das Modul zeigt  $Id: 72_TA_CMI_JSON.pm 17662 2018-11-02 14:40:28Z delmar $ - ist das das richtige - da von gestern?
Diese ID hängt am SVN commit. Wir sind hier aber im Git-Niemandsland, deshalb ist das kein verlässlicher Indikator. Am verlässlichsten ist tatsächlich der Code-vergleich mit Git im Browser.
In diesem Fall muss zB Logging_Analog im Code vorkommen. Dann bist du up-to-date.

Zitat von: GrazPi am 03 November 2018, 18:42:20
Das RAS ("Raumtemperaturabhängige Steuerung") eigentlich die Stellung des Drehschalters am der kleinen Bedieneinheit an - die Info kann sehr helfen falls dort jemand das ganze Haus auf "Frostschutz" abgesenkt hat ;-)
Alles klar, dann kommt das mit rein.

Zitat von: GrazPi am 03 November 2018, 18:42:20
Die Maßeinheiten wären gut zu haben - um die Werte sicher korrekt zu verstehen und auch um zu erkennen ob man tatsächlich im Wert 9 Einte Temperatur und keine Drehzahl liest.
Ja, kommt auch rein. Schritt 1 für mich ist aber, dass du überhaupt mal Werte rauskriegst.
Ich arbeite hier an den Updates nur 30 Minuten am Stück (1:0 für Perl vs Java :-) ), da muss ich haushalten mit den Features pro Update

Lutz, ich hatte hier noch so manchen Fehler. Du hattest bestimmt die letzte Version (zumindest wenn readingNamesLoggingAnalog drin war). Bitte nochmal Update von Git holen. Pfad sollte gleich bleiben (die letzte Version vom Master).

schöne Grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

CoolTux

Zitat von: delmar am 03 November 2018, 20:50:59
Danke CoolTux!
Ich mach seit 15 Jahren Java und habe kiloweise Java-code gesehen, der von C Entwicklern geschrieben wurde. Genauso muss sich mein Perl-Code für euch anfühlen :-)
Es sind aber genau Hinweise wie dieser, die diese feinen Unterschiede herausarbeiten. Danke, werd ich beim nächsten SVN-update berücksichtigen.
Eigentlich ist es ja fast egal wie so lange es klappt, es stach mir nur sehr ins Auge und wollte kurz zeigen das es kleiner geht.   :)

Zitat von: delmar am 03 November 2018, 20:50:59
Ich mach immer ein komplettes restart von FHEM, wenn ich ein neues Modul hinzufüge.
Ist vielleicht auf einem Produktiven System nicht immer so lustig, beseitigt aber so manchen Zweifel
A propos Zweifel: ich hab das bei mir Lokal natürlich auch getestet und hab die Meldung von wegen "too many arguments" nicht bekommen. Sonst hätte ich dir diesen Schrott nicht zugemutet.
Wer weiß, woran das hängt? Perl version?
Beider erwähnten Routine hast Du die Anzahl der Argumente für die Übergabe oder den Aufruf geändert. Das ist nicht schlimm so lange man alles komplett neu läd, aber genau das hat der User nicht gemacht.
Es ist also kein Fehler bei Dir oder Deinem Code sondern der User darf kein reload machen sondern muss einen kompletten FHEM neustart machen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

GrazPi

Hallo Martin,
danke, die neue Version funktioniert und zeigt nun alle Loggingwerte an!
Habe natürlich einen richtigen FHEM-Neustart gemacht  8)
Schönes Rest-WE!
FHEM prod auf RazBerry 3, Dev auf virtuellem RasPi

delMar

Zitat von: GrazPi am 03 November 2018, 21:13:36
Hallo Martin,
danke, die neue Version funktioniert und zeigt nun alle Loggingwerte an!
Habe natürlich einen richtigen FHEM-Neustart gemacht  8)
Schönes Rest-WE!
Super, freut mich dass es läuft (der fehlende Underscore wars)
Dir auch ein schönes Wochenende und happy charting :)
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

delMar

So, auf GitHub nochmal eine neue Version zum Testen.
Neuerungen: eigenlich alles, was vorher so besprochen wurde.

* Attribute für includeUnitReadings und includePrettyReadings. Per default beide deaktiviert
* RAS Werte werden nun auch gelesen und als _RAS geschrieben. Konnte ich leider nicht testen - ich hab keine. (ich sollte das mal so umbauen, dass man auch statische JSONs als Datenquelle verwenden kann)
* code-improvements von CoolTux

Ich glaub, das wars.
Bei mir läufts soweit, sobald ich ein- oder zwei positive Rückmeldungen habe (oder in den nächsten Tagen bei mir selber nix schief geht), werd ichs auch ins SVN geben.

schöne Grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

CoolTux

Hallo Martin

Aktuell versuchen wir bei FHEM an zu fangen mit package zu arbeiten. Leider gibt es hier noch nichts zu im Wiki.
Package ist das selbe wie Klassen. Halt ein Namensraum. Eigentlich sehr einfach unter Perl.
https://forum.fhem.de/index.php/topic,92007.msg845225.html#msg845225
Hier findest du ein kleines Beispiel und einen weiterführenden Link zur Diskussion. Würde mich total freuen wenn Du Lust hast das bei Deinem Modul um zu setzen. Muss ja auch nicht gleich heut oder morgen sein


Grüße
Leon
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

delMar

Zitat von: CoolTux am 03 November 2018, 23:24:36
Aktuell versuchen wir bei FHEM an zu fangen mit package zu arbeiten. Leider gibt es hier noch nichts zu im Wiki.
Package ist das selbe wie Klassen. Halt ein Namensraum. Eigentlich sehr einfach unter Perl.
https://forum.fhem.de/index.php/topic,92007.msg845225.html#msg845225
Hier findest du ein kleines Beispiel und einen weiterführenden Link zur Diskussion. Würde mich total freuen wenn Du Lust hast das bei Deinem Modul um zu setzen. Muss ja auch nicht gleich heut oder morgen sein
Sehr gern.
Ich hab jetzt mal etwas herum experimentiert und hab auch lokal eine lauffähige Version, die ein eigenes Package nutzt.

Dazu noch einige Fragen:
Wenn ich im Package des Moduls ein 'use HttpUtils' habe, muss ich zB HttpUtils_NonblockingGet trotzdem mit Referenz aufs Package aufrufen, was in 'main::HttpUtils_NonblockingGet' resultiert. Muss das tatsächlich so sein, oder mach ich noch was falsch?
Die Imports auf fhem.pl sind natürlich nötig, war aber in meinem Fall auch ein ziemliches Trial-and-error, bis ich endlich alle durch hatte. Gibts da einen sichereren Ansatz? ZB eine IDE, die diese Imports automatisch ermittelt und schreibt. (Träumen wird man ja wohl dürfen, hihi)

Und - rein interesse halber - haben die Packages auch performancetechnisch eine Auswirkung in FHEM (zB bessere Laufzeitoptimierung von Speicher oder was weiß ich), oder dient es im großen und ganzen "nur" dazu, dass sich die einzelnen Module gegenseitig nicht auf die Füße treten?

Ahja: muss ich 'use POSIX' machen? Was macht das eigentlich? (Doku hab ich versucht zu lesen, aber nicht verstanden)
Irgendwo hab ich auch gelesen, dass man das in dieser Form nicht machen soll, sondern eher 'use POSIX ()'.

Danke!

Schöne Grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.