JUDO Steuerung

Begonnen von Guybrush, 17 Mai 2025, 19:10:08

Vorheriges Thema - Nächstes Thema

klausg

Ist bei mir immer noch gleich. Ich habe das Gerät gelöscht und neu angelegt. Ich bekomme Jul-C angezeigt. Die Restmenge ist jetzt konsistent mit der App.

Im Log sehe ich Fehlermeldungen zu den Abfragen zu 0100, 2500, 3E00, 2800, 2900 und 5600.
2025.06.10 14:55:14.582 1: JUDO (Judo) JUDO_RequestAPI(): Fatal error.  not defined! (called by JUDO_Connect)
2025.06.10 14:56:14.592 3: JUDO (Judo) JUDO_Callback(): error while requesting http://admin:nax77dax@192.168.77.239/api/rest/0100 - connect to http://192.168.77.239:80 timed out (called by HttpUtils_TimeoutErr)
2025.06.10 14:56:14.594 3: JUDO (Judo) JUDO_Callback(): error while requesting http://admin:nax77dax@192.168.77.239/api/rest/2500 - connect to http://192.168.77.239:80 timed out (called by HttpUtils_TimeoutErr)
2025.06.10 14:56:14.596 3: JUDO (Judo) JUDO_Callback(): error while requesting http://admin:xxxxxx@192.168.77.239/api/rest/3E00 - connect to http://192.168.77.239:80 timed out (called by HttpUtils_TimeoutErr)
2025.06.10 14:56:14.602 3: JUDO (Judo) JUDO_Callback(): error while requesting http://admin:xxxxxx@192.168.77.239/api/rest/2800 - connect to http://192.168.77.239:80 timed out (called by HttpUtils_TimeoutErr)
2025.06.10 14:56:14.604 3: JUDO (Judo) JUDO_Callback(): error while requesting http://admin:xxxxxx@192.168.77.239/api/rest/2900 - connect to http://192.168.77.239:80 timed out (called by HttpUtils_TimeoutErr)
2025.06.10 14:56:14.606 3: JUDO (Judo) JUDO_Callback(): error while requesting http://admin:xxxxxx@192.168.77.239/api/rest/5600 - connect to http://192.168.77.239:80 timed out (called by HttpUtils_TimeoutErr)
Wenn ich per Browser die Codes abfrage dann bekomme ich normal Antworten. Fängst Du damit was an?

klausg

Die Errors sind vielleicht ein Artefakt vom reload. Ignorier den Post.

Ich habe mal beim Update der Dosage $data in den Log geschrieben.
2025.06.10 15:22:42.208 5: JUDO (Judo) JUDO_Callback(): updating dosage -> data 0200000100000000000000000000000000000038000f00000073160000 (called by __ANON__)
2025.06.10 15:22:42.209 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/50_JUDO.pm line 750.
2025.06.10 15:22:42.209 5: JUDO (Judo) JUDO_Callback(): updating dosage -> type: JUL-C (2) - litres:  (0) (called by __ANON__)
2025.06.10 15:22:42.210 5: Starting notify loop for Judo, 1 event(s), first is dosageType: JUL-C
$data kommt hier falsch an. Ist '0200000100000000000000000000000000000038000f00000073160000' nicht 0102.

klausg

Gefunden. In my %addresses ist dosage => '4300' statt '6300'. Jetzt bekomme ich Jul-W angezeigt.

klausg

Hier die Readings jetzt.

Guybrush

du hast recht. da war ein typo in der Adresse.

operatingHours passt bei dir aber noch nicht. schick mir bitte mal das result von

requesting http://admin:xxxxxx@192.168.77.239/api/rest/2500

ist in der api nicht dokumentiert, aber die adresse scheint es ja zu geben. Du könntest sonst auch mal bei aktivierten verbose 5 ein checkAddresses (geht nur mit verbose 5) machen. das ruft alle verfügbaren Adressen auf und schreibt bei einem ergebnis die verfügbaren adressen in ein reading.

klausg

http://admin:xxxxxx@192.168.77.239/api/rest/2500
{"data": "1e010700"}

In meiner Judo App gibt es keine Betriebsstunden, aber es gibt den Punkt 'Nächste Wartung'. Hier wird angezeigt: 357 Tage.

Guybrush

#51
das ist echt schräg. bei der i-dos werden die betriebsstunden in reverse order zurückgegeben. bei der i-safe PRO ist das genau anders rum. Offensichtlich arbeiten bei Judo wohl mehrere Entwickler ohne Führung :o

mit der neuen Version sollte das jetzt aber gehen. Ich hab auch eine Funktion eingebaut, mit der nur noch die verfügbaren Funktionen angezeigt werden. Dies setzt vorraus, dass das reading model existiert, da hieran bestimmt wird welche Funktionen zur Verfügung stehen. Es sollten jetzt auch deine Werte automatisch aktualisiert werden

klausg

Danke - gut gelöst.

Ich sehe jetzt 'get Judo operationHours' nicht mehr in der Drop down Liste der get-Befehle und wird das Reading nicht updated. Auch wenn ich in der Kommandline den Befehl absetze wird das Reading nicht aktualisiert.

Btw. Ich bin ab morgen einige Tage schlecht erreichbar. Poste wenn ich etwas tun kann. Ich versuche es zeitnah zu machen.

Guybrush

das ist gut, dass du das nicht mehr gesehen hast. ansonsten wäre es ein bug gewesen. ich hab aber vergessen operatingHours in die Config für die i-dos einzutragen. ist behoben und sollte nun gehen

ch.eick

Hallo zusammen,
ich denke ich habe da noch eine ältere Judo-iSoft Plus, bei der die API noch ohne Encryption läuft.
Im httpmod mache ich folgendermaßen einen Login
reAuthRegex (no token)|(not logged in)|(not connected)|(Connection refused)
sid01ParseResponse 1
sid01URL https://%JUDO_ipaddress%:8124/?group=register&command=login&msgnumber=1&name=login&user=%JUDO_username%&password=%JUDO_password%&role=customer
sid02URL https://%JUDO_ipaddress%:8124/?group=register&command=connect&msgnumber=6&token=%token%&parameter=i-soft%20plus&serial%20number=%JUDO_serial%

Somit würde ich bei meinem Geräte Model auch nicht die Kommunikation mit den Crypto Bibliotheken benötigen.
use Crypt::OpenSSL::RSA;
use Crypt::OpenSSL::Bignum;
Wäre es trotzdem denkbar diese iSoft auch mit ins Modul aufzunehmen?
Könnte man dann dynamisch auf die OpenSSL Bibliotheken verzichten, da die ja momentan im Docker Container nicht gefunden werden, obwohl sie installiert sind?
Sollte das nicht gehen würde ich im entsprechenden Thread vom Docker Container mal nach einer Lösung forschen.

VG   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Guybrush

die crypt module werden benötigt um das passwort verschlüsselt im key value store von fhem zu speichern. das werde ich daher nicht umbauen. du kannst aber gerne mal alle urls aufschlüsseln und dort die results jeweils mit angeben. wenn die systematik ähnlich ist, könnte mans recht einfach machen.

ich meine aber auch, dass man bei judo das aktuelle/neue connectivity modul umsonst bekommt, wenn man dort anfragt. damit ginge dann die rest api auch bei deiner

ch.eick

Zitat von: Guybrush am 11 Juni 2025, 20:02:48die crypt module werden benötigt um das passwort verschlüsselt im key value store von fhem zu speichern. das werde ich daher nicht umbauen.
Okay, bei einem anderen Device verwende ich den key value store auch, da geht das jedoch ohne Verschlüsselung.
Ich habe da von irgend jemanden das hier in meine 99_myUtils.pm eingebaut. Gibt es da jetzt was besseres?
######################################################
# {KeyValue("read|store","<key>","<passwort>")}
######################################################
sub KeyValue {
    my ($step, $index, $value) = @_;
    my $key = getUniqueId().$index;
    my $e_value = "";
    my $error;

    if (eval "use Digest::MD5;1") {
      $key    = Digest::MD5::md5_hex(unpack "H*", $key);
      $key   .= Digest::MD5::md5_hex($key);
    }
   
    if ($step eq "read") {
      ($error, $value) = getKeyValue($index);
 
      if ( defined($error) ) {
        Log3 $index,3, "$index, can't read key from FhemUtils/uniqueID: $error";
        return undef;
      } 
 
      if ( defined($value) ) {
        my $dec_value = '';
 
        for my $char (map { pack('C', hex($_)) } ($value =~ /(..)/g)) {
          my $decode  = chop($key);
          $dec_value .= chr(ord($char)^ord($decode));
          $key        = $decode.$key;
        }
        return $dec_value;
      }
      else {
        Log3 $index,3,"$index, no key found in FhemUtils/uniqueID";
        return undef;
      }
    }

    if ($step eq "store") {
      for my $char (split //, $value) {
        my $encode = chop($key);
        $e_value  .= sprintf("%.2x",ord($char)^ord($encode));
        $key       = $encode.$key;
      }
      $error = setKeyValue($index, $e_value);
      return "error while saving key : $error" if(defined($error));
      return "Key successfully saved in FhemUtils/uniqueID Key $index";
    }
};

ZitatDu kannst aber gerne mal alle urls aufschlüsseln und dort die results jeweils mit angeben. wenn die systematik ähnlich ist, könnte mans recht einfach machen.
Hier wäre meine httpmod definition mit allen urls und regex. Mit Followget gibt es dabei zusätzlich sinnvolle Reihefolgen. Die userReading muss ich nochmal prüfen, da ich seit meinem FHEM Umzug einen Syntaxfehler gemeldet bekomme.
defmod JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=waterstop&command=valve&msgnumber=4&token=%token% 0
attr JUDO_iSoft DbLogExclude .*
attr JUDO_iSoft DbLogInclude consumption_WaterCurrent.*,consumption_WaterAverage,consumption_Water.*Summe,consumption_WaterTotal.*,consumption_Salt.*
attr JUDO_iSoft alias JUDO_iSoft
attr JUDO_iSoft authRetries 2
attr JUDO_iSoft comment Version 2022.08.22 08:00\
Web API auf :8000\
https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/
attr JUDO_iSoft disable 0
attr JUDO_iSoft enableControlSet 0
attr JUDO_iSoft event-on-change-reading consumption_.*,waterstop_.*
attr JUDO_iSoft event-on-update-reading consumption_WaterDaily3Hour-01.*,consumption_report_WaterDaily3Hour-01.*,consumption_report_WaterDailyDate.*,consumption_WaterWeeklyByDay-01.*,consumption_report_WaterWeeklyByDay-01.*,consumption_report_WaterWeeklyDate.*,consumption_WaterMonthlyByDay-01.*,consumption_report_WaterMonthlyByDay-01.*,consumption_report_WaterMonthlyDate.*,consumption_WaterYearByMonth-01.*,consumption_report_WaterYearByMonth-01.*,consumption_report_WaterYearDate.*
attr JUDO_iSoft extractAllJSON 0
attr JUDO_iSoft get11Name Event_list
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=state&command=event%20list&line=0&offset=0&token=%token%
attr JUDO_iSoft get22Name Info_SoftwareVersion
attr JUDO_iSoft get22URL https://%JUDO_ipaddress%:8124/?group=version&command=software%20version&msgnumber=1&token=%token%
attr JUDO_iSoft get23Name Info_HardwareVersion
attr JUDO_iSoft get23URL https://%JUDO_ipaddress%:8124/?group=version&command=hardware%20version&msgnumber=1&token=%token%
attr JUDO_iSoft get28Name Info_SerialNumber
attr JUDO_iSoft get28URL https://%JUDO_ipaddress%:8124/?group=spare%20part&command=serial%20number&msgnumber=5&token=%token%
attr JUDO_iSoft get32Name Info_InitDate
attr JUDO_iSoft get32URL https://%JUDO_ipaddress%:8124/?group=contract&command=init%20date&msgnumber=1&token=%token%
attr JUDO_iSoft get33Name Info_ServiceNumber
attr JUDO_iSoft get33URL https://%JUDO_ipaddress%:8124/?group=contract&command=service%20number&msgnumber=1&token=%token%
attr JUDO_iSoft get34Name Info_ServiceDate
attr JUDO_iSoft get34URL https://%JUDO_ipaddress%:8124/?group=contract&command=service%20date&msgnumber=1&token=%token%
attr JUDO_iSoft get35Name Water_Current
attr JUDO_iSoft get35URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20current&msgnumber=1&token=%token%
attr JUDO_iSoft get36-10Name consumption_WaterDaily3Hour-06
attr JUDO_iSoft get36-11Name consumption_WaterDaily3Hour-07
attr JUDO_iSoft get36-12Name consumption_WaterDaily3Hour-08
attr JUDO_iSoft get36-5Name consumption_WaterDaily3Hour-01
attr JUDO_iSoft get36-6Name consumption_WaterDaily3Hour-02
attr JUDO_iSoft get36-7Name consumption_WaterDaily3Hour-03
attr JUDO_iSoft get36-8Name consumption_WaterDaily3Hour-04
attr JUDO_iSoft get36-9Name consumption_WaterDaily3Hour-05
attr JUDO_iSoft get361-10Name consumption_report_WaterDaily3Hour-06
attr JUDO_iSoft get361-11Name consumption_report_WaterDaily3Hour-07
attr JUDO_iSoft get361-12Name consumption_report_WaterDaily3Hour-08
attr JUDO_iSoft get361-5Name consumption_report_WaterDaily3Hour-01
attr JUDO_iSoft get361-6Name consumption_report_WaterDaily3Hour-02
attr JUDO_iSoft get361-7Name consumption_report_WaterDaily3Hour-03
attr JUDO_iSoft get361-8Name consumption_report_WaterDaily3Hour-04
attr JUDO_iSoft get361-9Name consumption_report_WaterDaily3Hour-05
attr JUDO_iSoft get361DeleteIfUnmatched 1
attr JUDO_iSoft get361MaxAge 86400
attr JUDO_iSoft get361Name Report_Water_Daily
attr JUDO_iSoft get361RegOpt g
attr JUDO_iSoft get361Regex [ ](-?[0-9]{1,4})
attr JUDO_iSoft get361URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20daily&msgnumber=1&token=%token%&year=%_YEAR%&month=%_MONTH%&day=%_DAY%
attr JUDO_iSoft get36DeleteIfUnmatched 1
attr JUDO_iSoft get36Name Water_Daily
attr JUDO_iSoft get36RegOpt g
attr JUDO_iSoft get36Regex [ ](-?[0-9]{1,4})
attr JUDO_iSoft get36URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20daily&msgnumber=1&token=%token%
attr JUDO_iSoft get37-10Name consumption_WaterWeeklyByDay-06
attr JUDO_iSoft get37-11Name consumption_WaterWeeklyByDay-07
attr JUDO_iSoft get37-5Name consumption_WaterWeeklyByDay-01
attr JUDO_iSoft get37-6Name consumption_WaterWeeklyByDay-02
attr JUDO_iSoft get37-7Name consumption_WaterWeeklyByDay-03
attr JUDO_iSoft get37-8Name consumption_WaterWeeklyByDay-04
attr JUDO_iSoft get37-9Name consumption_WaterWeeklyByDay-05
attr JUDO_iSoft get371-10Name consumption_report_WaterWeeklyByDay-06
attr JUDO_iSoft get371-11Name consumption_report_WaterWeeklyByDay-07
attr JUDO_iSoft get371-5Name consumption_report_WaterWeeklyByDay-01
attr JUDO_iSoft get371-6Name consumption_report_WaterWeeklyByDay-02
attr JUDO_iSoft get371-7Name consumption_report_WaterWeeklyByDay-03
attr JUDO_iSoft get371-8Name consumption_report_WaterWeeklyByDay-04
attr JUDO_iSoft get371-9Name consumption_report_WaterWeeklyByDay-05
attr JUDO_iSoft get371AutoNumLen 2
attr JUDO_iSoft get371MaxAge 86400
attr JUDO_iSoft get371Name Report_Water_Weekly
attr JUDO_iSoft get371RegOpt g
attr JUDO_iSoft get371Regex [ ](-?[0-9]{1,4})
attr JUDO_iSoft get371URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20weekly&msgnumber=1&token=%token%&year=%_YEAR%&month=%_MONTH%&day=%_DAY%
attr JUDO_iSoft get37AutoNumLen 2
attr JUDO_iSoft get37Name Water_Weekly
attr JUDO_iSoft get37RegOpt g
attr JUDO_iSoft get37Regex [ ](-?[0-9]{1,4})
attr JUDO_iSoft get37URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20weekly&msgnumber=1&token=%token%
attr JUDO_iSoft get38-10Name consumption_WaterMonthlyByDay-06
attr JUDO_iSoft get38-11Name consumption_WaterMonthlyByDay-07
attr JUDO_iSoft get38-12Name consumption_WaterMonthlyByDay-08
attr JUDO_iSoft get38-13Name consumption_WaterMonthlyByDay-09
attr JUDO_iSoft get38-14Name consumption_WaterMonthlyByDay-10
attr JUDO_iSoft get38-15Name consumption_WaterMonthlyByDay-11
attr JUDO_iSoft get38-16Name consumption_WaterMonthlyByDay-12
attr JUDO_iSoft get38-17Name consumption_WaterMonthlyByDay-13
attr JUDO_iSoft get38-18Name consumption_WaterMonthlyByDay-14
attr JUDO_iSoft get38-19Name consumption_WaterMonthlyByDay-15
attr JUDO_iSoft get38-20Name consumption_WaterMonthlyByDay-16
attr JUDO_iSoft get38-21Name consumption_WaterMonthlyByDay-17
attr JUDO_iSoft get38-22Name consumption_WaterMonthlyByDay-18
attr JUDO_iSoft get38-23Name consumption_WaterMonthlyByDay-19
attr JUDO_iSoft get38-24Name consumption_WaterMonthlyByDay-20
attr JUDO_iSoft get38-25Name consumption_WaterMonthlyByDay-21
attr JUDO_iSoft get38-26Name consumption_WaterMonthlyByDay-22
attr JUDO_iSoft get38-27Name consumption_WaterMonthlyByDay-23
attr JUDO_iSoft get38-28Name consumption_WaterMonthlyByDay-24
attr JUDO_iSoft get38-29Name consumption_WaterMonthlyByDay-25
attr JUDO_iSoft get38-30Name consumption_WaterMonthlyByDay-26
attr JUDO_iSoft get38-31Name consumption_WaterMonthlyByDay-27
attr JUDO_iSoft get38-32Name consumption_WaterMonthlyByDay-28
attr JUDO_iSoft get38-33Name consumption_WaterMonthlyByDay-29
attr JUDO_iSoft get38-34Name consumption_WaterMonthlyByDay-30
attr JUDO_iSoft get38-35Name consumption_WaterMonthlyByDay-31
attr JUDO_iSoft get38-5Name consumption_WaterMonthlyByDay-01
attr JUDO_iSoft get38-6Name consumption_WaterMonthlyByDay-02
attr JUDO_iSoft get38-7Name consumption_WaterMonthlyByDay-03
attr JUDO_iSoft get38-8Name consumption_WaterMonthlyByDay-04
attr JUDO_iSoft get38-9Name consumption_WaterMonthlyByDay-05
attr JUDO_iSoft get381-10Name consumption_report_WaterMonthlyByDay-06
attr JUDO_iSoft get381-11Name consumption_report_WaterMonthlyByDay-07
attr JUDO_iSoft get381-12Name consumption_report_WaterMonthlyByDay-08
attr JUDO_iSoft get381-13Name consumption_report_WaterMonthlyByDay-09
attr JUDO_iSoft get381-14Name consumption_report_WaterMonthlyByDay-10
attr JUDO_iSoft get381-15Name consumption_report_WaterMonthlyByDay-11
attr JUDO_iSoft get381-16Name consumption_report_WaterMonthlyByDay-12
attr JUDO_iSoft get381-17Name consumption_report_WaterMonthlyByDay-13
attr JUDO_iSoft get381-18Name consumption_report_WaterMonthlyByDay-14
attr JUDO_iSoft get381-19Name consumption_report_WaterMonthlyByDay-15
attr JUDO_iSoft get381-20Name consumption_report_WaterMonthlyByDay-16
attr JUDO_iSoft get381-21Name consumption_report_WaterMonthlyByDay-17
attr JUDO_iSoft get381-22Name consumption_report_WaterMonthlyByDay-18
attr JUDO_iSoft get381-23Name consumption_report_WaterMonthlyByDay-19
attr JUDO_iSoft get381-24Name consumption_report_WaterMonthlyByDay-20
attr JUDO_iSoft get381-25Name consumption_report_WaterMonthlyByDay-21
attr JUDO_iSoft get381-26Name consumption_report_WaterMonthlyByDay-22
attr JUDO_iSoft get381-27Name consumption_report_WaterMonthlyByDay-23
attr JUDO_iSoft get381-28Name consumption_report_WaterMonthlyByDay-24
attr JUDO_iSoft get381-29Name consumption_report_WaterMonthlyByDay-25
attr JUDO_iSoft get381-30Name consumption_report_WaterMonthlyByDay-26
attr JUDO_iSoft get381-31Name consumption_report_WaterMonthlyByDay-27
attr JUDO_iSoft get381-32Name consumption_report_WaterMonthlyByDay-28
attr JUDO_iSoft get381-33Name consumption_report_WaterMonthlyByDay-29
attr JUDO_iSoft get381-34Name consumption_report_WaterMonthlyByDay-30
attr JUDO_iSoft get381-35Name consumption_report_WaterMonthlyByDay-31
attr JUDO_iSoft get381-5Name consumption_report_WaterMonthlyByDay-01
attr JUDO_iSoft get381-6Name consumption_report_WaterMonthlyByDay-02
attr JUDO_iSoft get381-7Name consumption_report_WaterMonthlyByDay-03
attr JUDO_iSoft get381-8Name consumption_report_WaterMonthlyByDay-04
attr JUDO_iSoft get381-9Name consumption_report_WaterMonthlyByDay-05
attr JUDO_iSoft get381DeleteIfUnmatched 1
attr JUDO_iSoft get381MaxAge 86400
attr JUDO_iSoft get381Name Report_Water_Monthly
attr JUDO_iSoft get381RegOpt g
attr JUDO_iSoft get381Regex [ ](-?[0-9]{1,4})
attr JUDO_iSoft get381URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20monthly&msgnumber=1&token=%token%&year=%_YEAR%&month=%_MONTH%
attr JUDO_iSoft get38DeleteIfUnmatched 1
attr JUDO_iSoft get38Name Water_Monthly
attr JUDO_iSoft get38RegOpt g
attr JUDO_iSoft get38Regex [ ](-?[0-9]{1,4})
attr JUDO_iSoft get38URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20monthly&msgnumber=1&token=%token%
attr JUDO_iSoft get39-10Name consumption_WaterYearByMonth-06
attr JUDO_iSoft get39-11Name consumption_WaterYearByMonth-07
attr JUDO_iSoft get39-12Name consumption_WaterYearByMonth-08
attr JUDO_iSoft get39-13Name consumption_WaterYearByMonth-09
attr JUDO_iSoft get39-14Name consumption_WaterYearByMonth-10
attr JUDO_iSoft get39-15Name consumption_WaterYearByMonth-11
attr JUDO_iSoft get39-16Name consumption_WaterYearByMonth-12
attr JUDO_iSoft get39-5Name consumption_WaterYearByMonth-01
attr JUDO_iSoft get39-6Name consumption_WaterYearByMonth-02
attr JUDO_iSoft get39-7Name consumption_WaterYearByMonth-03
attr JUDO_iSoft get39-8Name consumption_WaterYearByMonth-04
attr JUDO_iSoft get39-9Name consumption_WaterYearByMonth-05
attr JUDO_iSoft get391-10Name consumption_report_WaterYearByMonth-06
attr JUDO_iSoft get391-11Name consumption_report_WaterYearByMonth-07
attr JUDO_iSoft get391-12Name consumption_report_WaterYearByMonth-08
attr JUDO_iSoft get391-13Name consumption_report_WaterYearByMonth-09
attr JUDO_iSoft get391-14Name consumption_report_WaterYearByMonth-10
attr JUDO_iSoft get391-15Name consumption_report_WaterYearByMonth-11
attr JUDO_iSoft get391-16Name consumption_report_WaterYearByMonth-12
attr JUDO_iSoft get391-5Name consumption_report_WaterYearByMonth-01
attr JUDO_iSoft get391-6Name consumption_report_WaterYearByMonth-02
attr JUDO_iSoft get391-7Name consumption_report_WaterYearByMonth-03
attr JUDO_iSoft get391-8Name consumption_report_WaterYearByMonth-04
attr JUDO_iSoft get391-9Name consumption_report_WaterYearByMonth-05
attr JUDO_iSoft get391AutoNumLen 2
attr JUDO_iSoft get391MaxAge 86400
attr JUDO_iSoft get391Name Report_Water_Yearly
attr JUDO_iSoft get391RegOpt g
attr JUDO_iSoft get391Regex [ ](-?[0-9]{1,4})
attr JUDO_iSoft get391URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20yearly&msgnumber=1&token=%token%&year=%_YEAR%
attr JUDO_iSoft get39AutoNumLen 2
attr JUDO_iSoft get39Name Water_Yearly
attr JUDO_iSoft get39RegOpt g
attr JUDO_iSoft get39Regex [ ](-?[0-9]{1,4})
attr JUDO_iSoft get39URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20yearly&msgnumber=1&token=%token%
attr JUDO_iSoft get40Name Water_Total
attr JUDO_iSoft get40URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20total&msgnumber=1&token=%token%
attr JUDO_iSoft get41Name Report_WaterOfDays
attr JUDO_iSoft get41URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20weekly&msgnumber=1&token=%token%&year=%_YEAR%&month=%_MONTH%&day=%_DAY%&offset=%_OFFSET%
attr JUDO_iSoft get42Name Water_Average
attr JUDO_iSoft get42URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20average&msgnumber=1&token=%token%
attr JUDO_iSoft get43Name Water_Actual_Abstraction_Time
attr JUDO_iSoft get43URL https://%JUDO_ipaddress%:8124/?group=consumption&command=actual%20abstraction%20time&msgnumber=1&token=%token%
attr JUDO_iSoft get44Name Waterstop_Actual_Quantity
attr JUDO_iSoft get44URL https://%JUDO_ipaddress%:8124/?group=consumption&command=actual%20quantity&msgnumber=1&token=%token%
attr JUDO_iSoft get45Name Salt_Quantity
attr JUDO_iSoft get45URL https://%JUDO_ipaddress%:8124/?group=consumption&command=salt%20quantity&msgnumber=1&token=%token%
attr JUDO_iSoft get47Name Salt_Range
attr JUDO_iSoft get47URL https://%JUDO_ipaddress%:8124/?group=consumption&command=salt%20range&msgnumber=1&token=%token%
attr JUDO_iSoft get49Name Hardness_Residual
attr JUDO_iSoft get49URL https://%JUDO_ipaddress%:8124/?group=settings&command=residual%20hardness&msgnumber=1&token=%token%
attr JUDO_iSoft get50Name Hardness_Natural
attr JUDO_iSoft get50URL https://%JUDO_ipaddress%:8124/?group=info&command=natural%20hardness&msgnumber=1&token=%token%
attr JUDO_iSoft get53Name Regeneration
attr JUDO_iSoft get53URL https://%JUDO_ipaddress%:8124/?group=settings&command=regeneration&msgnumber=1&token=%token%
attr JUDO_iSoft get55Name Waterstop_Standby
attr JUDO_iSoft get55URL https://%JUDO_ipaddress%:8124/?group=waterstop&command=standby&msgnumber=1&token=%token%
attr JUDO_iSoft get58Name Waterstop_Valve
attr JUDO_iSoft get58URL https://%JUDO_ipaddress%:8124/?group=waterstop&command=valve&msgnumber=1&token=%token%
attr JUDO_iSoft get60Name Waterstop_Abstraction_Time
attr JUDO_iSoft get60URL https://%JUDO_ipaddress%:8124/?group=waterstop&command=abstraction%20time&msgnumber=1&token=%token%
attr JUDO_iSoft get62Name Waterstop_Flow_Rate
attr JUDO_iSoft get62URL https://%JUDO_ipaddress%:8124/?group=waterstop&command=flow%20rate&msgnumber=1&token=%token%
attr JUDO_iSoft get64Name Waterstop_Quantity
attr JUDO_iSoft get64URL https://%JUDO_ipaddress%:8124/?group=waterstop&command=quantity&msgnumber=1&token=%token%
attr JUDO_iSoft get66Name Waterstop_Vacation
attr JUDO_iSoft get66URL https://%JUDO_ipaddress%:8124/?group=waterstop&command=vacation&msgnumber=1&token=%token%
attr JUDO_iSoft getHeader1 Content-Type: application/json
attr JUDO_iSoft getHeader2 Accept: */*
attr JUDO_iSoft group Wasser
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)|(not connected)|(Connection refused)
attr JUDO_iSoft reading01Name token
attr JUDO_iSoft reading01Regex "token":"([^"]+)"
attr JUDO_iSoft reading22Name version_SoftwareVersion
attr JUDO_iSoft reading22Regex "software version","data":"(.*)","group":"version"
attr JUDO_iSoft reading23Name version_HardwareVersion
attr JUDO_iSoft reading23Regex "hardware version","data":"(.*)","group":"version"
attr JUDO_iSoft reading28Name spare_part_SerialNumber
attr JUDO_iSoft reading28Regex "serial number","data":"(.*)","group":"spare part"
attr JUDO_iSoft reading32Name contract_InitDate
attr JUDO_iSoft reading32OExpr POSIX::strftime("%Y-%m-%d %H:%M",localtime($val))
attr JUDO_iSoft reading32Regex "init date","data":"(.*)","group":"contract"
attr JUDO_iSoft reading34Name contract_ServiceDate
attr JUDO_iSoft reading34OExpr POSIX::strftime("%Y-%m-%d %H:%M",localtime($val))
attr JUDO_iSoft reading34Regex "service date","data":"(.*)","group":"contract"
attr JUDO_iSoft reading351Name consumption_WaterCurrentRaw
attr JUDO_iSoft reading351Regex "command":"water current","data":"(.*) .*","group":"consumption"
attr JUDO_iSoft reading352Name consumption_WaterCurrentSoft
attr JUDO_iSoft reading352Regex "command":"water current","data":".* (.*)","group":"consumption"
attr JUDO_iSoft reading401Name consumption_WaterTotalRaw
attr JUDO_iSoft reading401Regex "command":"water total","data":" (\d+) \d+","group":"consumption"
attr JUDO_iSoft reading402Name consumption_WaterTotalSoft
attr JUDO_iSoft reading402Regex "command":"water total","data":" \d+ (\d+)","group":"consumption"
attr JUDO_iSoft reading411Name consumption_WaterOfDaysDate
attr JUDO_iSoft reading411Regex "command":"water weekly.*"day":(\d+),"group".*"month":(\d+),"msg.*"offset":"(-?\d+)","status.*"week":(\d+),"year":(\d+),"wtu
attr JUDO_iSoft reading412Name consumption_WaterOfDaysByDay
attr JUDO_iSoft reading412Regex "command":"water weekly","data":" (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+).*offset
attr JUDO_iSoft reading42Name consumption_WaterAverage
attr JUDO_iSoft reading42Regex "command":"water average","data":"(\d+)","group":"consumption"
attr JUDO_iSoft reading43Name consumption_ActualAbstractionTime
attr JUDO_iSoft reading43Regex "command":"actual abstraction time","data":"(\d+)","group":"consumption"
attr JUDO_iSoft reading44Name consumption_ActualQuantity
attr JUDO_iSoft reading44Regex "command":"actual quantity","data":"(\d+)","group":"consumption"
attr JUDO_iSoft reading451Name consumption_SaltQuantityIn_kg
attr JUDO_iSoft reading451OExpr int($val/1000)
attr JUDO_iSoft reading451Regex "command":"salt quantity","data":"(\d+)","group":"consumption"
attr JUDO_iSoft reading45Name consumption_SaltQuantityInPercent
attr JUDO_iSoft reading45OExpr int($val/50000*100)
attr JUDO_iSoft reading45Regex "command":"salt quantity","data":"(\d+)","group":"consumption"
attr JUDO_iSoft reading471Name consumption_SaltRangeInWeeks
attr JUDO_iSoft reading471OExpr int($val/7)
attr JUDO_iSoft reading471Regex "command":"salt range","data":"(\d+)","group":"consumption"
attr JUDO_iSoft reading47Name consumption_SaltRangeInDays
attr JUDO_iSoft reading47Regex "command":"salt range","data":"(\d+)","group":"consumption"
attr JUDO_iSoft reading49Name settings_ResidualHardness
attr JUDO_iSoft reading49Regex "residual hardness","data":"(\d+)","group":"settings"
attr JUDO_iSoft reading50Name info_NaturalHardness
attr JUDO_iSoft reading50Regex "natural hardness","data":"(\d+)","group":"info"
attr JUDO_iSoft reading53Name settings_Regeneration
attr JUDO_iSoft reading53Regex "command":"regeneration","data":"(.*)","group":"settings"
attr JUDO_iSoft reading55Name waterstop_Standby
attr JUDO_iSoft reading55Regex "command":"standby","data":"(\d+)","group":"waterstop"
attr JUDO_iSoft reading58Name waterstop_State
attr JUDO_iSoft reading58Regex "command":"valve","data":"(\w+)","group":"waterstop"
attr JUDO_iSoft reading60Name waterstop_AbstractionTime
attr JUDO_iSoft reading60Regex "command":"abstraction time","data":"(\w+)","group":"waterstop"
attr JUDO_iSoft reading62Name waterstop_FlowRate
attr JUDO_iSoft reading62Regex "flow rate","data":"(\d+)","group":"waterstop"
attr JUDO_iSoft reading64Name waterstop_Quantity
attr JUDO_iSoft reading64Regex "command":"quantity","data":"(\d+)","group":"waterstop"
attr JUDO_iSoft reading66Name waterstop_Vacation
attr JUDO_iSoft reading66Regex "command":"vacation","data":"(.*)","group":"waterstop"
attr JUDO_iSoft replacement01Mode reading
attr JUDO_iSoft replacement01Regex %token%
attr JUDO_iSoft replacement01Value token
attr JUDO_iSoft replacement02Mode text
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%
attr JUDO_iSoft replacement02Value <IP-Adresse>
attr JUDO_iSoft replacement03Mode text
attr JUDO_iSoft replacement03Regex %JUDO_password%
attr JUDO_iSoft replacement03Value <Passwort>
attr JUDO_iSoft replacement04Mode text
attr JUDO_iSoft replacement04Regex %JUDO_username%
attr JUDO_iSoft replacement04Value <User Name>
attr JUDO_iSoft replacement05Mode text
attr JUDO_iSoft replacement05Regex %JUDO_serial%
attr JUDO_iSoft replacement05Value <Seriennummer>
attr JUDO_iSoft replacement06Mode reading
attr JUDO_iSoft replacement06Regex %_YEAR%
attr JUDO_iSoft replacement06Value _YEAR
attr JUDO_iSoft replacement07Mode reading
attr JUDO_iSoft replacement07Regex %_MONTH%
attr JUDO_iSoft replacement07Value _MONTH
attr JUDO_iSoft replacement08Mode reading
attr JUDO_iSoft replacement08Regex %_DAY%
attr JUDO_iSoft replacement08Value _DAY
attr JUDO_iSoft replacement09Mode reading
attr JUDO_iSoft replacement09Regex %_OFFSET%
attr JUDO_iSoft replacement09Value _OFFSET
attr JUDO_iSoft replacement10Mode reading
attr JUDO_iSoft replacement10Regex %_OFFSET%
attr JUDO_iSoft replacement10Value _OFFSET
attr JUDO_iSoft room Wasser
attr JUDO_iSoft set46FollowGet Salt_Quantity
attr JUDO_iSoft set46IExpr $val*1000
attr JUDO_iSoft set46Name Salt_Quantity
attr JUDO_iSoft set46URL https://%JUDO_ipaddress%:8124/?group=consumption&command=salt%20quantity&msgnumber=1&token=%token%&parameter=$val
attr JUDO_iSoft set48FollowGet Hardness_Residual
attr JUDO_iSoft set48Hint slider,6,1,10
attr JUDO_iSoft set48Name Hardness_Residual
attr JUDO_iSoft set48URL https://%JUDO_ipaddress%:8124/?group=settings&command=residual%20hardness&msgnumber=1&token=%token%&parameter=$val
attr JUDO_iSoft set51FollowGet Regeneration
attr JUDO_iSoft set51Hint start,stop
attr JUDO_iSoft set51Name Regeneration
attr JUDO_iSoft set51NoArg 1
attr JUDO_iSoft set51TextArg 1
attr JUDO_iSoft set51URL https://%JUDO_ipaddress%:8124/?group=settings&command=regeneration&msgnumber=1&token=%token%&parameter=$val
attr JUDO_iSoft set54FollowGet Waterstop_Standby
attr JUDO_iSoft set54Hint 0,1
attr JUDO_iSoft set54Name Waterstop_Standby
attr JUDO_iSoft set54URL https://%JUDO_ipaddress%:8124/?group=waterstop&command=standby&msgnumber=1&token=%token%&parameter=$val
attr JUDO_iSoft set56FollowGet Waterstop_Vacation
attr JUDO_iSoft set56Hint close,open
attr JUDO_iSoft set56Name Waterstop_Valve
attr JUDO_iSoft set56NoArg 1
attr JUDO_iSoft set56TextArg 1
attr JUDO_iSoft set56URL https://%JUDO_ipaddress%:8124/?group=waterstop&command=valve&msgnumber=1&token=%token%&parameter=$val
attr JUDO_iSoft set59FollowGet Waterstop_Abstraction_Time
attr JUDO_iSoft set59Hint slider,1,1,31
attr JUDO_iSoft set59Name Waterstop_Abstraction_Time
attr JUDO_iSoft set59URL https://%JUDO_ipaddress%:8124/?group=waterstop&command=abstraction%20time&msgnumber=1&token=%token%&parameter=$val
attr JUDO_iSoft set61FollowGet Waterstop_Flow_Rate
attr JUDO_iSoft set61Hint slider,0,500,5000
attr JUDO_iSoft set61Name Waterstop_Flow_Rate
attr JUDO_iSoft set61URL https://%JUDO_ipaddress%:8124/?group=waterstop&command=flow%20rate&msgnumber=1&token=%token%&parameter=$val
attr JUDO_iSoft set63FollowGet Waterstop_Quantity
attr JUDO_iSoft set63Hint slider,100,100,3000
attr JUDO_iSoft set63Name Waterstop_Quantity
attr JUDO_iSoft set63URL https://%JUDO_ipaddress%:8124/?group=waterstop&command=quantity&msgnumber=1&token=%token%&parameter=$val
attr JUDO_iSoft set65FollowGet Waterstop_Vacation
attr JUDO_iSoft set65Hint slider,0,1,31
attr JUDO_iSoft set65Name Waterstop_Vacation
attr JUDO_iSoft set65URL https://%JUDO_ipaddress%:8124/?group=waterstop&command=vacation&msgnumber=1&token=%token%&parameter=$val
attr JUDO_iSoft showBody 1
attr JUDO_iSoft showError 1
attr JUDO_iSoft sid01ParseResponse 1
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&command=login&msgnumber=1&name=login&user=%JUDO_username%&password=%JUDO_password%&role=customer
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&command=connect&msgnumber=6&token=%token%&parameter=i-soft%20plus&serial%20number=%JUDO_serial%
attr JUDO_iSoft stateFormat {\
 my $l1   = ReadingsVal("$name","waterstop_State", "");;\
 my $l2   = ReadingsVal("$name","waterstop_FlowRate", "")." l";;\
 my $l3   = ReadingsVal("$name","waterstop_Quantity", "")." l";;\
 my $l4   = ReadingsVal("$name","waterstop_AbstractionTime", "")." Min";;\
 my $l5   = ReadingsVal("$name","waterstop_Vacation", "");;\
 my $l6   = ReadingsVal("$name","waterstop_Standby", "");;\
 my $d1   = ReadingsVal("$name","consumption_ActualQuantity", "")." l";;\
 my $d2   = ReadingsVal("$name","consumption_WaterAverage", "")." l";;\
 my $d3   = ReadingsVal("$name","consumption_WaterCurrentSoft", "")." l";;\
 my $d4   = ReadingsVal("$name","consumption_WaterCurrentRaw", "")." l";;\
 my $d5   = round(ReadingsVal("$name","consumption_WaterTotalSoft_X", "")/1000 ,3)." m³";;\
 my $d6   = round(ReadingsVal("$name","consumption_WaterTotalRaw_X", "")/1000 ,3)." m³";;\
 my $v1   = round(ReadingsVal("$name","consumption_WaterTotalRaw_X", "")/1000 ,3)." m³";;\
 my $v2   = ReadingsVal("$name","consumption_WaterDailySumme", "")." l";;\
 my $v3   = ReadingsVal("$name","consumption_WaterWeeklySumme", "")." l";;\
 my $h1   = ReadingsVal("$name","info_NaturalHardness", "")." °dH";;\
 my $h2   = ReadingsVal("$name","settings_ResidualHardness", "")." °dH";;\
 my $s1   = ReadingsVal("$name","consumption_SaltQuantityInPercent", "")." %";;\
 my $s2   = ReadingsVal("$name","consumption_SaltRangeInWeeks", "")." W";;\
 my $s3   = ReadingsVal("$name","consumption_SaltRangeInDays", "")." T";;\
\
"<html><table border=2 bordercolor='darkgreen' cellspacing=0>\
<tr><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>Leckageschutz</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>Einstellung</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>Wasser</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>Verbrauch</td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>Status</td><td style='padding-right:5px;;padding-left:5px'>".$l1."</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>gesamt</td><td style='padding-right:5px;;padding-left:5px'>".$v1."</td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>Max Durchfluss</td><td style='padding-right:5px;;padding-left:5px'>".$l2."</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>aktuell</td><td style='padding-right:5px;;padding-left:5px'> </td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;Entnahme</td><td style='padding-right:5px;;padding-left:5px'>".$l3."</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;Tag</td><td style='padding-right:5px;;padding-left:5px'>".$v2."</td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;Entnahmedauer</td><td style='padding-right:5px;;padding-left:5px'>".$l4."</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;Woche</td><td style='padding-right:5px;;padding-left:5px'>".$v3."</td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>Urlaubsmodus</td><td style='padding-right:5px;;padding-left:5px'>".$l5."</td><td style='padding-right:5px;;padding-left:5px'> </td><td style='padding-right:5px;;padding-left:5px'> </td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>Sleepmodusdauer</td><td style='padding-right:5px;;padding-left:5px'>".$l6."</td><td style='padding-right:5px;;padding-left:5px'> </td><td style='padding-right:5px;;padding-left:5px'> </td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'> </td><td style='padding-right:5px;;padding-left:5px'> </td><td style='padding-right:5px;;padding-left:5px'> </td><td style='padding-right:5px;;padding-left:5px'> </td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>Wasser</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>Menge</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>Wasserhärte</td><td style='padding-right:5px;;padding-left:5px'> </td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>Durchfluss aktuell</td><td style='padding-right:5px;;padding-left:5px'>".$d1."</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;natürlich</td><td style='padding-right:5px;;padding-left:5px'>".$h1."</td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;Durchschnitt</td><td style='padding-right:5px;;padding-left:5px'>".$d2."</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;wunsch</td><td style='padding-right:5px;;padding-left:5px'>".$h2."</td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;Soft</td><td style='padding-right:5px;;padding-left:5px'>".$d3."</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>Salzvorrat</td><td style='padding-right:5px;;padding-left:5px'> </td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;Raw</td><td style='padding-right:5px;;padding-left:5px'>".$d4."</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;Menge</td><td style='padding-right:5px;;padding-left:5px'>".$s1."</td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;Soft gesamt</td><td style='padding-right:5px;;padding-left:5px'>".$d5."</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;Reichweite</td><td style='padding-right:5px;;padding-left:5px'>".$s2."</td></tr>\
 <tr><td style='padding-right:5px;;padding-left:5px;;text-align:left;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;Raw gesamt</td><td style='padding-right:5px;;padding-left:5px'>".$d6."</td><td style='padding-right:5px;;padding-left:5px;;font-weight:bold'>&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;&nbsp;;Reichweite</td><td style='padding-right:5px;;padding-left:5px'>".$s3."</td></tr>\
 </table></html>"\
}
attr JUDO_iSoft timeout 20
attr JUDO_iSoft userReadings consumption_WaterDailySumme:consumption_WaterDaily3Hour-01.* {my $NAME="JUDO_iSoft" ;; my $s=0 ;; for ( my $i=1;; $i<=8;; $i++ ) { (ReadingsVal("$NAME","consumption_WaterDaily3Hour-".sprintf("%02d",$i),0) gt 0)?$s += ReadingsVal("$NAME","consumption_WaterDaily3Hour-".sprintf("%02d",$i),0):$s=$s;;};; CommandDeleteReading(undef, $NAME." Water_Daily-.*");; $s},\
\
consumption_report_WaterDailyDate:consumption_report_WaterDaily3Hour-01.* {my $date=sprintf("%4d-%02d-%02d",ReadingsVal("$NAME","_YEAR",0),ReadingsVal("$NAME","_MONTH",0),ReadingsVal("$NAME","_DAY",0) );; $date },\
\
consumption_report_WaterDailySumme:consumption_report_WaterDailyDate.* {my $NAME="JUDO_iSoft" ;; my $s=0 ;; for ( my $i=1;; $i<=8;; $i++ ) { (ReadingsVal("$NAME","consumption_report_WaterDaily3Hour-".sprintf("%02d",$i),0) gt 0)?$s += ReadingsVal("$NAME","consumption_report_WaterDaily3Hour-".sprintf("%02d",$i),0):$s=$s;;};; CommandDeleteReading(undef, $NAME Report_Water_Daily-.*");; $s},\
\
consumption_WaterWeeklySumme:consumption_WaterWeeklyByDay-01.* {my $NAME="JUDO_iSoft" ;; my $s=0 ;; for ( my $i=1;; $i<=7;; $i++ ) { (ReadingsVal("$NAME","consumption_WaterWeeklyByDay-".sprintf("%02d",$i),0) gt 0)?$s += ReadingsVal("$NAME","consumption_WaterWeeklyByDay-".sprintf("%02d",$i),0):$s=$s;;};; CommandDeleteReading(undef, $NAME Water_Weekly-.*");; $s},\
\
consumption_report_WaterWeeklyDate:consumption_report_WaterWeeklyByDay-01.* {my $date=sprintf("%4d-%02d-%02d",ReadingsVal("$NAME","_YEAR",0),ReadingsVal("$NAME","_MONTH",0),ReadingsVal("$NAME","_DAY",0) );; $date },\
\
consumption_report_WaterWeeklySumme:consumption_report_WaterWeeklyDate.* {my $NAME="JUDO_iSoft" ;; my $s=0 ;; for ( my $i=1;; $i<=7;; $i++ ) { (ReadingsVal("$NAME","consumption_report_WaterWeeklyByDay-".sprintf("%02d",$i),0) gt 0)?$s += ReadingsVal("$NAME","consumption_report_WaterWeeklyByDay-".sprintf("%02d",$i),0):$s=$s;;};; CommandDeleteReading(undef, $NAME." Report_Water_Weekly-.*");; $s},\
\
consumption_WaterMonthlySumme:consumption_WaterMonthlyByDay-01.* {my $NAME="JUDO_iSoft" ;; my $s=0 ;; for ( my $i=1;; $i<=31;; $i++ ) { (ReadingsVal("$NAME","consumption_WaterMonthlyByDay-".sprintf("%02d",$i),0) gt 0)?$s += ReadingsVal("$NAME","consumption_WaterMonthlyByDay-".sprintf("%02d",$i),0):$s=$s;;};; CommandDeleteReading(undef, $NAME." Water_Monthly-.*");; $s},\
\
consumption_report_WaterMonthlyDate:consumption_report_WaterMonthlyByDay-01.* {my $date=sprintf("%4d-%02d",ReadingsVal("$NAME","_YEAR",0),ReadingsVal("$NAME","_MONTH",0) );; $date },\
\
consumption_report_WaterMonthlySumme:consumption_report_WaterMonthlyDate.* {my $NAME="JUDO_iSoft" ;; my $s=0 ;; for ( my $i=1;; $i<=31;; $i++ ) { (ReadingsVal("$NAME","consumption_report_WaterMonthlyByDay-".sprintf("%02d",$i),0) gt 0)?$s += ReadingsVal("$NAME","consumption_report_WaterMonthlyByDay-".sprintf("%02d",$i),0):$s=$s;;};; CommandDeleteReading(undef, $NAME." Report_Water_Monthly-.*");; $s},\
\
consumption_WaterYearSumme:consumption_WaterYearByMonth-01.* {my $NAME="JUDO_iSoft" ;; my $s=0 ;; for ( my $i=1;; $i<=31;; $i++ ) { (ReadingsVal("$NAME","consumption_WaterYearByMonth-".sprintf("%02d",$i),0) gt 0)?$s += ReadingsVal("$NAME","consumption_WaterYearByMonth-".sprintf("%02d",$i),0):$s=$s;;};; CommandDeleteReading(undef, $NAME." Water_Yearly-.*");; $s},\
\
consumption_report_WaterYearDate:consumption_report_WaterYearByMonth-01.* {my $date=sprintf("%4d",ReadingsVal("$NAME","_YEAR",0) );; $date },\
\
consumption_report_WaterYearSumme:consumption_report_WaterYearDate.* {my $NAME="JUDO_iSoft" ;; my $s=0 ;; for ( my $i=1;; $i<=31;; $i++ ) { (ReadingsVal("$NAME","consumption_report_WaterYearByMonth-".sprintf("%02d",$i),0) gt 0)?$s += ReadingsVal("$NAME","consumption_report_WaterYearByMonth-".sprintf("%02d",$i),0):$s=$s;;};; CommandDeleteReading(undef, $NAME." Report_Water_Yearly-.*");; $s},\
\
consumption_WaterOfDaysDate:consumption_WaterOfDaysDate-1.* {my $NAME="JUDO_iSoft" ;; my $date=sprintf("%4d-%02d-%02d Week %02d used Offset %d", ReadingsVal("$NAME","consumption_WaterOfDaysDate-5",0),ReadingsVal("$NAME","consumption_WaterOfDaysDate-2",0),ReadingsVal("$NAME","consumption_WaterOfDaysDate-1",0),ReadingsVal("$NAME","consumption_WaterOfDaysDate-4",0),ReadingsVal("$NAME","_OFFSET",0) );; CommandDeleteReading(undef, $NAME."  consumption_WaterOfDaysDate-.*");; $date },\
\
consumption_WaterTotalRaw_X:consumption_WaterTotalRaw.* monotonic { ReadingsVal($NAME,"consumption_WaterTotalRaw",0) },\
consumption_WaterTotalSoft_X:consumption_WaterTotalSoft.* monotonic { ReadingsVal($NAME,"consumption_WaterTotalSoft",0) }
attr JUDO_iSoft verbose 0


Zitatich meine aber auch, dass man bei judo das aktuelle/neue connectivity modul umsonst bekommt, wenn man dort anfragt. damit ginge dann die rest api auch bei deiner
Und wie bekommt man das auf die Steuerungsbaugruppe?
Ich werde bald eh eine Wartung machen lassen und das dann direkt mit anfragen.
Am Anfang gab es da mal viele Probleme mit der FW in der Judo iSoft, da wurde sogar die komplette Baugruppe getauscht und ich hatte mit der Judo Entwicklung sehr tiefe Fehlersuche gemacht. Am besten schreibe ich den Techniker nochmal direkt an :-)
Ich habe es jetzt mal getestet und im Log erscheint diese Meldung.
Das Passwort ist das, was ich eingetragen habe, jedoch gibt es diesen API Call nicht.
2025.06.11 20:14:27.524 3: JUDO (JUDO_iSoft_test) JUDO_Callback(): error while requesting http://judoMaster:<Passwort>@192.168.178.12/api/rest/FF00 - 192.168.178.12: Connection refused (111) (called by __ANON__)
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

#57
Ich habe mir gerade mal die JUDO_StorePassword($$) angeschaut und das sieht so aus wie bei mir.
Die Crypto Bibliotheken sind auf Kommentar
# use Crypt::OpenSSL::RSA;
# use Crypt::OpenSSL::Bignum;
Den username und das Passwort habe ich im Device gesetzt und im Log sieht man den ersten Versuch
2025.06.11 20:14:27.524 3: JUDO (JUDO_iSoft_test) JUDO_Callback(): error while requesting http://<username>:<Passwort>@<IP-Addresse>/api/rest/FF00 - 192.168.178.12: Connection refused (111) (called by __ANON__)
Davon leite ich nun ab, dass ich die beiden Bibliotheken im Docker Container nicht benötige. Ich kann in der Funktion aber auch keinen Verschlüsselungsaufruf erkennen, bin jedoch auch kein Entwickler.

Wenn wir die Judo iSoft Plus auch ins Modul bekommen könnten, würde ich mich risig freuen :-)

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Guybrush

ich brauche nicht nur die urls, sondern auch das was auf diesen ausgegeben wird. sonst kann ich da nicht viel zu sagen

klausg

operatingHours sind jetzt perfekt!

operatingHours     8d 18h 27m      2025-06-12 09:33:01

Hast du eine Idee was diese Readings bedeuten:
operatingMode      0               2025-06-12 09:37:04
warningCode        256             2025-06-12 09:34:04