Hauptmenü

HTTPMOD - JUDO isoft Save

Begonnen von ch.eick, 09 November 2020, 09:28:04

Vorheriges Thema - Nächstes Thema

ch.eick

Hallo zusammen,

ich habe das mal hier für Malte geöffnet :
==================================================================================================================
Guten Morgen,

ich versuche hier die "Safe" (also nicht Plus" Variante) in FHEM einzubinden. Bei der Safe muss man die Daten ja auf der Webseite myjudo.eu abrufen

Ich glaube mein Problem ist zuerst das ich keinen Token bekomme. Manuell funktioniert es:


https://www.myjudo.eu/interface/?group=register&command=login&name=login&user=MeinUser&password=MD5VomPasswort&nohash=Service&role=customer
{"status":"ok","token":"DerToken","role":"customer","notifications":{"email":"0","sms":"0","push":"0"},"startpage":null,"data":[],"servicenumber":""}

Userkonto + MD5 scheinen zu funktionieren.

Der Fehler
2020.11.09 07:52:52 5: JUDO_iSoft: get called with DeviceData
2020.11.09 07:52:52 5: JUDO_iSoft: get found option DeviceData in attribute get01Name
2020.11.09 07:52:52 4: JUDO_iSoft: get will now request DeviceData, no optional value
2020.11.09 07:52:52 5: JUDO_iSoft: AddToQueue adds type get01 to URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data, no data, header Content-Type: application/json
Accept: */*, retry 0, initial queue len: 0
2020.11.09 07:52:52 5: JUDO_iSoft: HandleSendQueue called, qlen = 1
2020.11.09 07:52:52 5: JUDO_iSoft: GetRegex found precompiled Regex for replacement01 as (?^:%token%)
2020.11.09 07:52:52 5: JUDO_iSoft: Replace called for type get01, regex (?^:%token%), mode reading, value token input: Content-Type: application/json
viele weitere Einträge...
2020.11.09 07:52:52 5: HttpUtils url=https://www.myjudo.eu/interface/?token=&group=register&command=get%20device%20data
2020.11.09 07:52:52 4: IP: www.myjudo.eu -> 178.15.150.126
2020.11.09 07:52:52 5: HttpUtils request header:
GET /interface/?token=&group=register&command=get%20device%20data HTTP/1.0
Host: www.myjudo.eu
User-Agent: fhem
Accept-Encoding: gzip,deflate
Content-Type: application/json
Accept: */*

2020.11.09 07:52:52 4: https://www.myjudo.eu/interface/?token=&group=register&command=get%20device%20data: HTTP response code 200
2020.11.09 07:52:52 5: HttpUtils https://www.myjudo.eu/interface/?token=&group=register&command=get%20device%20data: Got data, length: 0
2020.11.09 07:52:52 5: HttpUtils response header:
HTTP/1.1 200 OK
Date: Mon, 09 Nov 2020 06:52:52 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Access-Control-Allow-Origin: *
Content-Length: 0
Connection: close
Content-Type: application/json; charset=utf-8
2020.11.09 07:52:52 4: JUDO_iSoft: Read callback: request type was get01 retry 0,
header: HTTP/1.1 200 OK
Date: Mon, 09 Nov 2020 06:52:52 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Access-Control-Allow-Origin: *
Content-Length: 0
Connection: close
Content-Type: application/json; charset=utf-8, no body
2020.11.09 07:52:52 5: JUDO_iSoft: Read callback: body empty
2020.11.09 07:52:52 4: JUDO_iSoft: Read found charset header and set decoding to utf-8 (bodyDecode was set to auto)
2020.11.09 07:52:52 4: JUDO_iSoft: Read is decoding the buffer as utf-8
2020.11.09 07:52:52 5: JUDO_iSoft: GetCookies is looking for Cookies
2020.11.09 07:52:52 5: JUDO_iSoft: ExtractSid called, context get, num 01
2020.11.09 07:52:52 4: JUDO_iSoft: checking for redirects, code=200, ignore=0
2020.11.09 07:52:52 4: JUDO_iSoft: no redirects to handle
2020.11.09 07:52:52 5: JUDO_iSoft: GetRegex found precompiled reAuthRegex for  as (?^:(no token)|(not logged in))
2020.11.09 07:52:52 5: JUDO_iSoft: CheckAuth is checking buffer with ReAuthRegex (?^:(no token)|(not logged in))
2020.11.09 07:52:52 5: JUDO_iSoft: CheckAuth decided no authentication required
2020.11.09 07:52:52 5: JUDO_iSoft: ExtractReading DeviceData with json data ...
2020.11.09 07:52:52 5: JUDO_iSoft: ExtractReading DeviceData did not match
2020.11.09 07:52:52 3: JUDO_iSoft: no parsed JSON structure available
2020.11.09 07:52:52 4: JUDO_iSoft: Read response to get01 didn't match any Reading
2020.11.09 07:52:52 5: JUDO_iSoft: HandleSendQueue called, qlen = 0


Eigentlich sollte doch sid01URL zuerst aufgerufen werden. Also die URL zum abrufen des Token, anschließend mit dem Token den eigentlichen URL aufruf (welcher manuell auch funktioniert -> lange JSON "Liste").
Außer den selbst angelegten Readings erscheint nichts auf der Device - Übersicht.



Definiert ist das ganze mit:
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token% 300
setuuid JUDO_iSoft ..
attr JUDO_iSoft userattr get01JSON get01Name get01URL get02JSON get02Name get02URL getHeader1 getHeader2 reading01JSON reading01Name reading01Regex reading02JSON reading03JSON reading03OExpr replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value replacement06Mode:reading,internal,text,expression,key replacement06Regex replacement06Value sid01ParseResponse:0,1 sid01URL
attr JUDO_iSoft authRetries 2
attr JUDO_iSoft enableControlSet 1
attr JUDO_iSoft extractAllJSON 1
attr JUDO_iSoft get01JSON data
attr JUDO_iSoft get01Name DeviceData
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
attr JUDO_iSoft get02JSON data
attr JUDO_iSoft get02Name WaterConsumptionDay
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%date=%date%&parameter=day
attr JUDO_iSoft getHeader1 Content-Type: application/json
attr JUDO_iSoft getHeader2 Accept: */*
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)
attr JUDO_iSoft reading01JSON data
attr JUDO_iSoft reading01Name token
attr JUDO_iSoft reading01Regex "token":"([^"]+)"
attr JUDO_iSoft reading02JSON group
attr JUDO_iSoft reading03JSON command
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val;; readingsBulkUpdate($hash,$val,ReadingsVal("JUDO_iSoft","data",""))
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 www.myjudo.eu
attr JUDO_iSoft replacement03Mode text
attr JUDO_iSoft replacement03Regex %JUDO_password%
attr JUDO_iSoft replacement03Value Md5HashPasswort
attr JUDO_iSoft replacement04Mode text
attr JUDO_iSoft replacement04Regex %JUDO_username%
attr JUDO_iSoft replacement04Value MeinUser
attr JUDO_iSoft replacement05Mode text
attr JUDO_iSoft replacement05Regex %JUDO_serial%
attr JUDO_iSoft replacement05Value Seriennummer/MacAdresse im Format 12345678
attr JUDO_iSoft replacement06Mode reading
attr JUDO_iSoft replacement06Regex %date%
attr JUDO_iSoft replacement06Value date
attr JUDO_iSoft room SmartDevices
attr JUDO_iSoft showError 1
attr JUDO_iSoft sid01ParseResponse 1
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%/interface/?group=register&command=login&name=login&user=%JUDO_username%&password=%JUDO_password%&nohash=Service&role=customer
attr JUDO_iSoft timeout 5
attr JUDO_iSoft userReadings waterTotal { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 4, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 0, 2)) / 1000 ). ' m³'}, waterProcessed { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 4, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 0, 2)) / 1000 ). ' m³'}, saltLevel { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 0, 2))/1  ). ' g'}, saltRange { hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 4, 2)). " Tage" }


Vielen Dank
Malte
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

Sooo,

ich kann folgendes in der Rückmeldung vom Portal nicht finden

attr JUDO_iSoft reAuthRegex (no token)|(not logged in)

somit wird auch nicht zum sid01 verzweigt.

Setze auch mal

showBody 1

dann kannst Du die Rückmeldung direkt im httpbody sehen.

Damit reAuthRegex reagieren kann, muss der String "(no token)" oder "(not logged in)" in der Rückmeldung vom Portal zu sehen sein.

Bei der manuellen Anmeldung schickst Du auch das hier mit

{"status":"ok","token":"DerToken","role":"customer","notifications":{"email":"0","sms":"0","push":"0"},"startpage":null,"data":[],"servicenumber":""}


das wäre dann beim sid01 z.B. sowas, was ich in Deiner Definition nicht erkennen kann.

set01Data {"status":"ok","token":"DerToken","role":"customer","notifications":{"email":"0","sms":"0","push":"0"},"startpage":null,"data":[],"servicenumber":""}


Auch wenn es viele Meldungen zu dem Device im Log sind, schicke sie bitte alle mit, um die Analyse zu machen.
Bereinigen solltest Du nur die, die von anderen Devices noch dazwischen kommen :-)
Wenn es zu lang ist, dann bitte als fhemlog.txt anhängen, da ansonsten der Post irgendwann abgeschnitten würde.

Viele Grüße und Entschuldigung, wenn ich Dich ausgelagert habe.
    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

maltejahn

Hallo Christian,

Dank schon einmal. Das mit dem neuen Beitrag passe.

Eine Anfrage um an einen Token zu kommen ergibt bei richtigem Passwort:
{"status":"ok","token":"DerToken","role":"customer","notifications":{"email":"0","sms":"0","push":"0"},"startpage":null,"data":[],"servicenumber":""}
ein falscher ergibt:
"status":"error","data":"Login failed"}

-> geändert habe ich dann
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)
zu
attr JUDO_iSoft reAuthRegex (error)|(Login failed)
-> jetzt kommt ein Token der auch funktioniert.
-> Jetzt kommen Daten!


Der "State" vom Device bleibt allerdings "? ? ?"
Aber, ich gestehe ich hab es nicht verstanden.

Es gibt die:
https://%JUDO_ipaddress%/interface/?group=register&command=login&name=login&user=%JUDO_username%&password=%JUDO_password%&nohash=Service&role=customer
welche mir ein JSON mit Token liefert und
[code]get01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data[/code]
Welche die tatsächlichen Nutzdaten als JSON liefert.

Aber definiert wurde das ganze mit (lt. WIki) mit
DEF https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token% 300


Weil der Aufruf lädt die HTML myJudo im eingeloggten zustand herunter (siehe Anhang, verbose 5)

Im Log erscheint "nur" noch (ohne "Verbose"
2020.11.09 11:49:16 3: JUDO_iSoft: error while parsing JSON data: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<!DOCTYPE html>\r\n<...") at (eval 18457) line 1.

2020.11.09 11:49:17 3: JUDO_iSoft: error while parsing JSON data: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<!DOCTYPE html>\r\n<...") at (eval 18469) line 1.

2020.11.09 11:49:18 3: JUDO_iSoft: error while parsing JSON data: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<!DOCTYPE html>\r\n<...") at (eval 18497) line 1.

2020.11.09 11:49:18 3: JUDO_iSoft: no parsed JSON structure available

weil die URL der Definiton ja eine HTML und keine JSON ist.

Müsste das Device nicht eher
https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
definiert sein

Ganz zu schweigen hiervon
https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%date=%date%&parameter=day
https://wiki.fhem.de/wiki/JUDO_iSoft_Plus
->ich<- finde da keine Entsprechungen im HTML. Aber das ist wieder eine andere Gechichte


Im Anhang der log zu folgendem Eintrag:
setuuid JUDO_iSoft vieleZahlen
attr JUDO_iSoft userattr get01JSON get01Name get01URL get02JSON get02Name get02URL getHeader1 getHeader2 reading01JSON reading01Name reading01Regex reading02JSON reading03JSON reading03OExpr replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value replacement06Mode:reading,internal,text,expression,key replacement06Regex replacement06Value sid01ParseResponse:0,1 sid01URL
attr JUDO_iSoft authRetries 2
attr JUDO_iSoft enableControlSet 1
attr JUDO_iSoft extractAllJSON 1
attr JUDO_iSoft get01JSON data
attr JUDO_iSoft get01Name DeviceData
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
attr JUDO_iSoft getHeader1 Content-Type: application/json
attr JUDO_iSoft getHeader2 Accept: */*
attr JUDO_iSoft reAuthRegex (error)|(Login failed)
attr JUDO_iSoft reading01JSON data
attr JUDO_iSoft reading01Name token
attr JUDO_iSoft reading01Regex "token":"([^"]+)"
attr JUDO_iSoft reading02JSON group
attr JUDO_iSoft reading03JSON command
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val;; readingsBulkUpdate($hash,$val,ReadingsVal("JUDO_iSoft","data",""))
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 www.myjudo.eu
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 Username
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 %date%
attr JUDO_iSoft replacement06Value date
attr JUDO_iSoft room SmartDevices
attr JUDO_iSoft showBody 1
attr JUDO_iSoft showError 1
attr JUDO_iSoft sid01ParseResponse 1
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%/interface/?group=register&command=login&name=login&user=%JUDO_username%&password=%JUDO_password%&nohash=Service&role=customer
attr JUDO_iSoft timeout 5
attr JUDO_iSoft userReadings waterTotal { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 4, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 0, 2)) / 1000 ). ' m³'},\
waterProcessed { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 4, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 0, 2)) / 1000 ). ' m³'},\
saltLevel { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 0, 2))  ). ' g'},\
saltRange { hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 4, 2)). " Tage" }


maltejahn

Hallo,

ganz funktioniert es nicht. Der Token wird abgeholt, den Abruf der Daten müsse ich über get im Device selbst triggern.

Grüße
Malte


ch.eick

Hi

Schön, Du bekommst schon eine Antwort.

Das ist zu unspezifisch, da in der JSON Antwort der String error auch vorkommt!

JSON Ausschnitt: ,"errors":[],"waterscene_time":null,"waterscene_time_garden":null,
attr JUDO_iSoft reAuthRegex (error)|(Login failed)

Deshalb kommt auch:
2020.11.09 11:39:07 4: JUDO_iSoft: CheckAuth decided new authentication required

Und es looped bis
attr JUDO_iSoft authRetries 2

2020.11.09 11:39:19 4: JUDO_iSoft: Authentication still required but no retries left - did last authentication fail?

Das solltest Du schon mal beheben, dann wird das Log auch kürzer :-)

Wie die Daten ausgelesen werden kann ich noch nicht so vollständig erkennen.
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

Zitat von: maltejahn am 09 November 2020, 12:57:56
ganz funktioniert es nicht. Der Token wird abgeholt, den Abruf der Daten müsse ich über get im Device selbst triggern.
Schau dazu mal in meine Antwort, die hat etwas länger gedauert.
Der Abruf der Daten kommt als Schritt zwei, wenn das Login nicht mehr looped.
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

maltejahn

Guten Morgen,

also, jetzt geht es. Allerdings verstehe ich nicht, warum als Def

https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token% 300
im Wiki verwendet wurde. Als Antwort kommt hier eine "HTML" anstatt einer JSON. Ist das einzig dafür da, um den Token auf Gültigkeit zu prüfen? Mit dem Verbose Level kann ich es im Log verschwinden lassen, frage mich nur ob es notwendig ist.

Mit dem jetzigen Device klappt es jedenfalls, einzig musste ich das abrufen von "Device Data" noch triggern:
get01Poll 1
get01PollDelay 300


Der direkte Aufruf von Einträgen, damit muß ich mich mal beschäftigen. Vor allem, wie komme ich an die "commands"
Im Wiki
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%date=%date%&parameter=day
Zitat%date=%date%
müsste doch eigentlich
&date=%date%
sein.

Ergibt:
get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%&date=%date%&parameter=day
führt im Log zu
Zitathttps://www.myjudo.eu/interface/?token=MeinToken&group=register&command=get_chart_data&serialnumber=%JUDO_serial&date=12112020¶meter=day
Was passiert den mit dem Wort parameter, ist das nur ein Fehler in der Darstellung? Bei manuellem Aufruf bekomme ich ein JSON mit
{"status":"requested"} was auch im Log erscheint - scheint also nur die Darstellung zu sein.
Im Device erscheint dann "Status requested", aber Daten kamen keine.

anstatt:
ZitatHier bekommt man einen Zeile zurück wobei immer 8 Zeichen zusammen die LiterZahl (als Hex) bilden. Zeichen 0-8 - Verbrauch von 0-3 Uhr Zeichen 9-16 - Verbrauch von 3-6 Uhr usw.

Das gesamte Device sieht nun so aus:

defmod JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token% 300
attr JUDO_iSoft userattr get01JSON get01Name get01Poll:0,1 get01PollDelay get01URL get02JSON get02Name get02URL getHeader1 getHeader2 reading01JSON reading01Name reading01Regex reading02JSON reading03JSON reading03OExpr replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value replacement06Mode:reading,internal,text,expression,key replacement06Regex replacement06Value sid01ParseResponse:0,1 sid01URL
attr JUDO_iSoft authRetries 2
attr JUDO_iSoft enableControlSet 1
attr JUDO_iSoft extractAllJSON 1
attr JUDO_iSoft get01JSON data
attr JUDO_iSoft get01Name DeviceData
attr JUDO_iSoft get01Poll 1
attr JUDO_iSoft get01PollDelay 300
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
attr JUDO_iSoft get02JSON data
attr JUDO_iSoft get02Name WaterConsumptionDay
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%&date=%date%&parameter=day
attr JUDO_iSoft getHeader1 Content-Type: application/json
attr JUDO_iSoft getHeader2 Accept: */*
attr JUDO_iSoft reAuthRegex "Login failed"
attr JUDO_iSoft reading01JSON data
attr JUDO_iSoft reading01Name token
attr JUDO_iSoft reading01Regex "token":"([^"]+)"
attr JUDO_iSoft reading02JSON group
attr JUDO_iSoft reading03JSON command
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val;; readingsBulkUpdate($hash,$val,ReadingsVal("JUDO_iSoft","data",""))
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 www.myjudo.eu
attr JUDO_iSoft replacement03Mode text
attr JUDO_iSoft replacement03Regex %JUDO_password%
attr JUDO_iSoft replacement03Value MeinPasswort
attr JUDO_iSoft replacement04Mode text
attr JUDO_iSoft replacement04Regex %JUDO_username%
attr JUDO_iSoft replacement04Value MeinUser
attr JUDO_iSoft replacement05Mode text
attr JUDO_iSoft replacement05Regex %JUDO_serial%
attr JUDO_iSoft replacement05Value MeineSeriennummer
attr JUDO_iSoft replacement06Mode reading
attr JUDO_iSoft replacement06Regex %date%
attr JUDO_iSoft replacement06Value date
attr JUDO_iSoft room SmartDevices
attr JUDO_iSoft showError 1
attr JUDO_iSoft sid01ParseResponse 1
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%/interface/?group=register&command=login&name=login&user=%JUDO_username%&password=%JUDO_password%&nohash=Service&role=customer
attr JUDO_iSoft timeout 5
attr JUDO_iSoft userReadings waterTotal { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 4, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 0, 2)) / 1000 ). ' m³'},\
waterProcessed { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 4, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 0, 2)) / 1000 ). ' m³'},\
saltLevel { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 0, 2))  ). ' g'},\
saltRange { hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 4, 2)). " Tage" },date {(strftime '%d%m%Y', localtime)}
attr JUDO_iSoft verbose 5


Im Logfile zuerst der automatisierte Aufruf um die Daten abzufragen, dann manuell getriggert die Abfrage WaterConsumptionDay

ch.eick

#7
Zitat von: maltejahn am 12 November 2020, 08:01:44
also, jetzt geht es. Allerdings verstehe ich nicht, warum als Def

https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token% 300
im Wiki verwendet wurde. Als Antwort kommt hier eine "HTML" anstatt einer JSON. Ist das einzig dafür da, um den Token auf Gültigkeit zu prüfen? Mit dem Verbose Level kann ich es im Log verschwinden lassen, frage mich nur ob es notwendig ist.
Bei def kannst Du den Aufruf eintragen, den Du regelmäßig haben möchtest, oder auch anstatt 300 einfach 0 eintragen, dann wird es garnicht abgerufen.


Zitat
Der direkte Aufruf von Einträgen, damit muß ich mich mal beschäftigen. Vor allem, wie komme ich an die "commands"
Im Wiki
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%date=%date%&parameter=daymüsste doch eigentlich
&date=%date%
sein.

Ergibt:
get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%&date=%date%&parameter=day
führt im Log zu Was passiert den mit dem Wort parameter, ist das nur ein Fehler in der Darstellung? Bei manuellem Aufruf bekomme ich ein JSON mit
{"status":"requested"} was auch im Log erscheint - scheint also nur die Darstellung zu sein.
Im Device erscheint dann "Status requested", aber Daten kamen keine.
Wahrscheinlich haben nicht so viele die isoft Save und der, der damit angefangen hat, hat eventuell auf halbem Weg aufgehört.
Was falsch ist oder nicht mehr zum jetzigen Portal passt könntest Du ja im Wiki korrigieren.
So habe ich es mit dem isoft Plus gemacht, damit es jetzt gurt verwendet werden kann. Den Thread hier hast Du ja schon mal für die Kommunikation.

Eventuell machst Du noch ein schönes stateFormat und wenn alles rund läuft stellst Du es hier nochmal vor.

Hier nochmal das stateFormat von dem isoft Plus, wenn Du es anpassen und verwenden möchtest.

{
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   = ReadingsVal("$name","consumption_WaterTotalSoft", "")." l";
my $d6   = ReadingsVal("$name","consumption_WaterTotalRaw", "")." l";
my $v1   = ReadingsVal("$name","consumption_WaterTotalRaw", "")." l";
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>"
}


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

thanatos

Hallo Malte, hallo Christian,

ich habe selbst eine soft Save (ohne PLUS) und bin leider bzgl. der Programmierkenntnisse nicht so fit wie ihr. Ich habe mich gerade riesig gefreut, dass ihr euch an das Thema der iSoft Save gewagt habt. Ich habe mir mal die code Schnipsel von Malte geschnappt und User / Passwort / Serialnummer eingetragen. Leider klappt es nicht auf anhiebt. Das hatte ich ehrlich gesagt auch nicht erwartet. ;)
Wenn ich den token aus einer manuellen Anmeldung auf der Webseite kopiere und hinterlege und die Definition von:

attr JUDO_iSoft replacement01Mode reading
attr JUDO_iSoft replacement01Regex %token%
attr JUDO_iSoft replacement01Value *geheimer token*


auf


attr JUDO_iSoft replacement01Mode text
attr JUDO_iSoft replacement01Regex %token%
attr JUDO_iSoft replacement01Value *geheimer token*


ändere, klappt die Anmeldung.

Die readings sind teilweise scheinbar nicht sinnvoll skaliert ;=)



DeviceData login failed 2020-12-27 14:42:09
DeviceData-1 0x1 2020-12-27 16:20:03
DeviceData-10 OK 2020-12-27 16:20:03
DeviceData-11 680902 2020-12-27 16:20:03
DeviceData-12 2020-12-27 16:20:03
DeviceData-13 OK 2020-12-27 16:20:03
DeviceData-14 0A05 2020-12-27 16:20:03
DeviceData-15 2020-12-27 16:20:03
DeviceData-16 OK 2020-12-27 16:20:03
DeviceData-17 FFB90200 2020-12-27 16:20:03
DeviceData-18 2020-12-27 16:20:03
DeviceData-19 OK 2020-12-27 16:20:03
DeviceData-2 0 2020-12-27 16:20:03
DeviceData-20 26139601 2020-12-27 16:20:03
DeviceData-21 2020-12-27 16:20:03
DeviceData-22 OK 2020-12-27 16:20:03
DeviceData-23 24 2020-12-27 16:20:03
DeviceData-24 2020-12-27 16:20:03
DeviceData-25 OK 2020-12-27 16:20:03
DeviceData-26 5DD04EC0 2020-12-27 16:20:03
DeviceData-27 2020-12-27 16:20:03
DeviceData-28 OK 2020-12-27 16:20:03
DeviceData-29 0:00030F30020010000400160110036400000000000000B81EC006190220003F00 2020-12-27 16:20:03
DeviceData-3 2020-12-27 16:20:03
DeviceData-30 2020-12-27 16:20:03
DeviceData-31 OK 2020-12-27 16:20:03
DeviceData-32 1:C0000000024708072821F700FE00000079002200000001000000910C39069202 2020-12-27 16:20:03
DeviceData-33 2020-12-27 16:20:03
DeviceData-34 OK 2020-12-27 16:20:03
DeviceData-35 2:003C78000000000048005201DC05DC0578000001DC05DC05000FB903780000FF 2020-12-27 16:20:03
DeviceData-36 2020-12-27 16:20:03
DeviceData-37 OK 2020-12-27 16:20:03
DeviceData-38 4E1E01000100 2020-12-27 16:20:03
DeviceData-39 2020-12-27 16:20:03
DeviceData-4 OK 2020-12-27 16:20:03
DeviceData-40 OK 2020-12-27 16:20:03
DeviceData-41 2270300 2020-12-27 16:20:03
DeviceData-42 2020-12-27 16:20:03
DeviceData-43 OK 2020-12-27 16:20:03
DeviceData-44 1600 2020-12-27 16:20:03
DeviceData-45 2020-12-27 16:20:03
DeviceData-46 OK 2020-12-27 16:20:03
DeviceData-47 0 2020-12-27 16:20:03
DeviceData-48 2020-12-27 16:20:03
DeviceData-49 OK 2020-12-27 16:20:03
DeviceData-5 0 2020-12-27 16:20:03
DeviceData-50 01010B4BAB 2020-12-27 16:20:03
DeviceData-51 2020-12-27 16:20:03
DeviceData-52 OK 2020-12-27 16:20:03
DeviceData-53 7E686B00 2020-12-27 16:20:03
DeviceData-54 2020-12-27 16:20:03
DeviceData-55 OK 2020-12-27 16:20:03
DeviceData-56 E1730200 2020-12-27 16:20:03
DeviceData-57 2020-12-27 16:20:03
DeviceData-58 OK 2020-12-27 16:20:03
DeviceData-59 27/12/2020 - 16:19:4 2020-12-27 16:20:03
DeviceData-6 2020-12-27 16:20:03
DeviceData-60 0x33 2020-12-27 16:20:03
DeviceData-61 5.10 2020-12-27 16:20:03
DeviceData-62 2.9h 2020-12-27 16:20:03
DeviceData-63 2020-12-27 16:20:03
DeviceData-64 1 2020-12-27 16:20:03
DeviceData-65 4 2020-12-27 16:20:03
DeviceData-66 1 2020-12-27 16:20:03
DeviceData-67 10 2020-12-27 16:20:03
DeviceData-68 1.0 2020-12-27 16:20:03
DeviceData-69 2019-11-15T13:54:22 2020-12-27 16:20:03
DeviceData-7 OK 2020-12-27 16:20:03
DeviceData-70 *geheim* 2020-12-27 16:20:03
DeviceData-71 online 2020-12-27 16:20:03
DeviceData-72 1.11 2020-12-27 16:20:03
DeviceData-73 0 2020-12-27 16:20:03
DeviceData-74 normal 2020-12-27 16:20:03
DeviceData-75 4 2020-12-27 16:20:03
DeviceData-76 1 2020-12-27 16:20:03
DeviceData-77 1 2020-12-27 16:20:03
DeviceData-8 2D139601 2020-12-27 16:20:03
DeviceData-9 2020-12-27 16:20:03
LAST_ERROR gethostbyname www.myjudo.eu failed 2020-12-27 15:29:24
command get device data 2020-12-27 16:20:03
data login failed 2020-12-27 14:42:09
data_01_data_01_da 0x1 2020-12-27 16:20:03
data_01_data_01_data_10_data 0 2020-12-27 16:20:03
data_01_data_01_data_10_er 2020-12-27 16:20:03
data_01_data_01_data_10_st OK 2020-12-27 16:20:03
data_01_data_01_data_12_data 0 2020-12-27 16:20:03
data_01_data_01_data_12_er 2020-12-27 16:20:03
data_01_data_01_data_12_st OK 2020-12-27 16:20:03
data_01_data_01_data_14_data 2D139601 2020-12-27 16:20:03
data_01_data_01_data_14_er 2020-12-27 16:20:03
data_01_data_01_data_14_st OK 2020-12-27 16:20:03
data_01_data_01_data_1_data 680902 2020-12-27 16:20:03
data_01_data_01_data_1_er 2020-12-27 16:20:03
data_01_data_01_data_1_st OK 2020-12-27 16:20:03
data_01_data_01_data_2_data 0A05 2020-12-27 16:20:03
data_01_data_01_data_2_er 2020-12-27 16:20:03
data_01_data_01_data_2_st OK 2020-12-27 16:20:03
data_01_data_01_data_3_data FFB90200 2020-12-27 16:20:03
data_01_data_01_data_3_er 2020-12-27 16:20:03
data_01_data_01_data_3_st OK 2020-12-27 16:20:03
data_01_data_01_data_5_data 26139601 2020-12-27 16:20:03
data_01_data_01_data_5_er 2020-12-27 16:20:03
data_01_data_01_data_5_st OK 2020-12-27 16:20:03
data_01_data_01_data_63_data 24 2020-12-27 16:20:03
data_01_data_01_data_63_er 2020-12-27 16:20:03
data_01_data_01_data_63_st OK 2020-12-27 16:20:03
data_01_data_01_data_6_data 5DD04EC0 2020-12-27 16:20:03
data_01_data_01_data_6_er 2020-12-27 16:20:03
data_01_data_01_data_6_st OK 2020-12-27 16:20:03
data_01_data_01_data_790_data 0:00030F30020010000400160110036400000000000000B81EC006190220003F00 2020-12-27 16:20:03
data_01_data_01_data_790_er 2020-12-27 16:20:03
data_01_data_01_data_790_st OK 2020-12-27 16:20:03
data_01_data_01_data_791_data 1:C0000000024708072821F700FE00000079002200000001000000910C39069202 2020-12-27 16:20:03
data_01_data_01_data_791_er 2020-12-27 16:20:03
data_01_data_01_data_791_st OK 2020-12-27 16:20:03
data_01_data_01_data_792_data 2:003C78000000000048005201DC05DC0578000001DC05DC05000FB903780000FF 2020-12-27 16:20:03
data_01_data_01_data_792_er 2020-12-27 16:20:03
data_01_data_01_data_792_st OK 2020-12-27 16:20:03
data_01_data_01_data_7_data 4E1E01000100 2020-12-27 16:20:03
data_01_data_01_data_7_er 2020-12-27 16:20:03
data_01_data_01_data_7_st OK 2020-12-27 16:20:03
data_01_data_01_data_8_data 2270300 2020-12-27 16:20:03
data_01_data_01_data_8_er 2020-12-27 16:20:03
data_01_data_01_data_8_st OK 2020-12-27 16:20:03
data_01_data_01_data_90_data 1600 2020-12-27 16:20:03
data_01_data_01_data_90_er 2020-12-27 16:20:03
data_01_data_01_data_90_st OK 2020-12-27 16:20:03
data_01_data_01_data_92_data 0 2020-12-27 16:20:03
data_01_data_01_data_92_er 2020-12-27 16:20:03
data_01_data_01_data_92_st OK 2020-12-27 16:20:03
data_01_data_01_data_93_data 01010B4BAB 2020-12-27 16:20:03
data_01_data_01_data_93_er 2020-12-27 16:20:03
data_01_data_01_data_93_st OK 2020-12-27 16:20:03
data_01_data_01_data_94_data 7E686B00 2020-12-27 16:20:03
data_01_data_01_data_94_er 2020-12-27 16:20:03
data_01_data_01_data_94_st OK 2020-12-27 16:20:03
data_01_data_01_data_9_data E1730200 2020-12-27 16:20:03
data_01_data_01_data_9_er 2020-12-27 16:20:03
data_01_data_01_data_9_st OK 2020-12-27 16:20:03
data_01_data_01_data_lu 27/12/2020 - 16:19:4 2020-12-27 16:20:03
data_01_data_01_dt 0x33 2020-12-27 16:20:03
data_01_data_01_hv 5.10 2020-12-27 16:20:03
data_01_data_01_sv 2.9h 2020-12-27 16:20:03
data_01_disable_time 2020-12-27 16:20:03
data_01_hardness_heater 1 2020-12-27 16:20:03
data_01_hardness_shower 4 2020-12-27 16:20:03
data_01_hardness_washing 1 2020-12-27 16:20:03
data_01_hardness_watering 10 2020-12-27 16:20:03
data_01_hv 1.0 2020-12-27 16:20:03
data_01_installation_date 2019-11-15T13:54:22 2020-12-27 16:20:03
data_01_serialnumber *geheim* 2020-12-27 16:20:03
data_01_status online 2020-12-27 16:20:03
data_01_sv 1.11 2020-12-27 16:20:03
data_01_update 0 2020-12-27 16:20:03
data_01_waterscene normal 2020-12-27 16:20:03
data_01_waterscene_normal 4 2020-12-27 16:20:03
data_01_waterscene_time 1 2020-12-27 16:20:03
data_01_waterscene_time_garden 1 2020-12-27 16:20:03
date 27122020 2020-12-27 16:20:03
saltLevel 382 g 2020-12-27 16:20:03
saltRange 19211 Tage 2020-12-27 16:20:03
status ok 2020-12-27 16:20:03
token *geheim* 2020-12-27 16:20:03
waterProcessed 7039.102 m³ 2020-12-27 16:20:03
waterTotal 206.594 m³ 2020-12-27 16:20:03


Besonders schön fand ich die 382g Salz für eine Reichweite von 19211 Tage. ;) Hier schient entweder eine Zuordnung oder eine Skalierung nicht zu passen.
Gibt es irgendeine Übersicht der Ausgaben der Judo iSofte Save?

Meine größten Probleme sind aktuell:

1) Die Anmelderoutine, da der Token ja mal ablaufen wird...
2) Die Zuordnung und Skalierung der Readings, hier fehlt mir aktuell eine Ansatzpunkt der Zuordnung bzw. Decodierung...

@Malte: Gibt es bei dir etwas neues zu deinem Code?

Danke jedenfalls an euch beide für diesen tollen Ansatz der Einbindung der i Soft save. :)

Grüße,
Marcus

ch.eick

Hallo Marcus.

Schau Dir mal HTTPMOD dazu an. Dieses attr liest aus einem reading

attr JUDO_iSoft replacement01Mode reading
attr JUDO_iSoft replacement01Regex %token%
attr JUDO_iSoft replacement01Value *geheimer token*


Hier liest Du Value als Text

attr JUDO_iSoft replacement01Mode text
attr JUDO_iSoft replacement01Regex %token%
attr JUDO_iSoft replacement01Value *geheimer token*


Wenn Du Dich eingearbeitet hast kannst Du auch Mode key verwenden, das würde dann aus dem KeyStore lesen und den Key nicht sichtbar ablegen.

Bei den readings von der Seite kann ich leider nicht helfen.

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

thanatos

Hallo Christian,

vielen Dank für die schnelle Rückmeldung. Vor lauter Ausprobieren und Brettern vor dem Kopf hatte ich den Code etwas zerstört gehabt. Ich habe es jetzt wieder auf folgendes geändert:


attr JUDO_iSoft replacement01Mode reading
attr JUDO_iSoft replacement01Regex %token%
attr JUDO_iSoft replacement01Value token


irgendwie war ich davon versessen, dort meinen token als "token" eintragen zu müssen.  ::) Naja, du hast mir da etwas die Augen geöffnet. Danke.

Jetzt klappt die Anmeldung, das Password habe ich als MD5Hash eingetragen, das scheint zu klappen, soweit ich das beurteilen kann.
Jetzt gilt es die Daten zu entschlüsseln...

@Malte: Was mir noch aufgefallen war mit der Abfrage:


https://www.myjudo.eu/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%geheim%&date=27122020&parameter=day


bekomme ich im Browser auch zuerst ein


{"status":"requested"}


wenn man dann die Seite aktualisiert, kommen jedoch bei mir die Daten:


{"status":"ok","data":"000000000000000000000011000000970000006B0000001B0000000800000000"}


Jetzt müsste ich mal die Doku lesen, wie man mit HTTPMOD einen wiederholten Seitenaufruf macht... mal gucken...  ;D

Grüße,
Marcus

maltejahn

Hallo,

war ewig nicht mehr hier.

Bisher funktioniert es gut, allerdings gibt es auch wenig zu nutzen. Einzig den momentanen Durchfluss und die Gesamtmenge betrachte ich mir. Die Salzmenge - naja. So Smart ist das Teil nicht. Es scheint einfach nur 250g/Tag abzuziehen.
Bei den UserReadings nutze ich also nur das Ergebnis von waterTotal , saltLevel (witzlos) und durchflussaktuell

defmod JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data 30\
\

attr JUDO_iSoft userattr get01Poll:0,1 replacement01Mode:reading,internal,text,expression,key replacement02Mode:reading,internal,text,expression,key replacement03Mode:reading,internal,text,expression,key replacement04Mode:reading,internal,text,expression,key replacement05Mode:reading,internal,text,expression,key replacement06Mode:reading,internal,text,expression,key sid01ParseResponse:0,1
attr JUDO_iSoft authRetries 2
attr JUDO_iSoft enableControlSet 1
attr JUDO_iSoft event-on-change-reading .*
attr JUDO_iSoft extractAllJSON 1
attr JUDO_iSoft get01JSON data
attr JUDO_iSoft get01Name DeviceData
attr JUDO_iSoft get01Poll 0
attr JUDO_iSoft get01PollDelay 300
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
attr JUDO_iSoft get02JSON data
attr JUDO_iSoft get02Name WaterConsumptionDay
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%date=%date%&parameter=day
attr JUDO_iSoft getHeader1 Content-Type: application/json
attr JUDO_iSoft getHeader2 Accept: */*
attr JUDO_iSoft oldreadings waterTotal, zeitdesreadings
attr JUDO_iSoft reAuthRegex "Login failed"
attr JUDO_iSoft reading01JSON data
attr JUDO_iSoft reading01Name token
attr JUDO_iSoft reading01Regex "token":"([^"]+)"
attr JUDO_iSoft reading02JSON group
attr JUDO_iSoft reading03JSON command
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val;; readingsBulkUpdate($hash,$val,ReadingsVal("JUDO_iSoft","data",""))
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 www.myjudo.eu
attr JUDO_iSoft replacement03Mode text
attr JUDO_iSoft replacement03Regex %JUDO_password%
attr JUDO_iSoft replacement03Value Hash
attr JUDO_iSoft replacement04Mode text
attr JUDO_iSoft replacement04Regex %JUDO_username%
attr JUDO_iSoft replacement04Value Benutzer
attr JUDO_iSoft replacement05Mode text
attr JUDO_iSoft replacement05Regex %JUDO_serial%
attr JUDO_iSoft replacement05Value 682719c9aa33
attr JUDO_iSoft replacement06Mode reading
attr JUDO_iSoft replacement06Regex %date%
attr JUDO_iSoft replacement06Value date
attr JUDO_iSoft room SmartDevices
attr JUDO_iSoft showError 1
attr JUDO_iSoft sid01ParseResponse 1
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%/interface/?group=register&command=login&name=login&user=%JUDO_username%&password=%JUDO_password%&nohash=Service&role=customer
attr JUDO_iSoft timeout 5
attr JUDO_iSoft userReadings waterTotal { ( hex ( substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_8_data", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_8_data", ''), 4, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_8_data", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_8_data", ''), 0, 2)) / 1000 ). ' '},\
saltLevel { ( hex ( substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 0, 2))  ). ' g'},saltRange { (hex ( substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 4, 2))). " Tage" },rohhaerte { (hex ( substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_90_data", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_90_data", ''), 0, 2)) ). " °dH" },\
durchflussaktuell { (hex ( substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_790_data", ''), 36, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_790_data", ''), 34, 2))  ). " l/h" }
attr JUDO_iSoft verbose 3

setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-1 0x1
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-10 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-11 680902
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-12
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-13 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-14 0A05
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-15
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-16 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-17 C5230300
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-18
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-19 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-2 00
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-20 21131200
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-21
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-22 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-23 24
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-24
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-25 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-26 5FA40607
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-27
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-28 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-29 0:00030F3000001000081616001D03A000000000000000C901E0061A0230004900
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-3
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-30
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-31 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-32 1:C00000000A3D9D081618CB00C10000005C001700000001006700910C12001200
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-33
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-34 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-35 2:003C1E000000000047000000A00F2C011E000306A00F2C010016DF031E0000FF
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-36
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-37 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-38 752000000000
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-39
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-4 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-40 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-41 CF180000
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-42
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-43 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-44 1600
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-45
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-46 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-47 0000
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-48
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-49 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-5 00
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-50 01010B64B5
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-51
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-52 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-53 BA5E6100
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-54
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-55 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-56 D00F0000
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-57
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-58 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-59 24/11/2020 - 10:41:3
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-6
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-60 0x33
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-61 5.10
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-62 2.9h
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-63 1
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-64 4
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-65 1
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-66 10
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-67 1.0
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-68 2020-11-05T14:27:57
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-69 Seriennummer
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-7 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-70 online
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-71 1.11
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-72 0
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-73 8
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-8 26131200
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-9
setstate JUDO_iSoft 2021-02-10 14:41:49 LAST_ERROR connect to https://www.myjudo.eu:443 timed out
setstate JUDO_iSoft 2021-02-11 16:27:50 command get-device data:
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_da 0x1
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_10_data 00
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_10_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_10_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_12_data 00
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_12_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_12_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_14_data 26006200
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_14_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_14_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_1_data 680902
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_1_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_1_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_2_data 0A05
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_2_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_2_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_3_data C5230300
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_3_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_3_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_5_data 1F006200
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_5_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_5_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_63_data 24
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_63_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_63_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_6_data 5FA410DD
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_6_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_6_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_790_data 0:00030F300000100008061500E9026C00000000000000C8087906180230001F00
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_790_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_790_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_791_data 1:C0000000001EA513161CCF00C10000005C001700000001006900910C54005400
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_791_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_791_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_792_data 2:003C1E000000000048000000A00F2C011E000306A00F2C010016E3031E0000FF
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_792_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_792_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_7_data 081900000000
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_7_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_7_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_8_data 88760000
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_8_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_8_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_90_data 1500
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_90_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_90_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_92_data 0000
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_92_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_92_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_93_data 01010B64B1
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_93_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_93_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_94_data 461E2100
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_94_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_94_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_9_data 374B0000
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_9_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_9_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_lu 11/2/2021 - 16:27:3
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_dt 0x33
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_hv 5.10
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_sv 2.9h
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_hardness_heater 1
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_hardness_shower 4
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_hardness_washing 1
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_hardness_watering 10
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_hv 1.0
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_installation_date Installdatum
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_serialnumber Seriennummer
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_status online
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_sv 1.11
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_update 0
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_waterscene_normal 8
setstate JUDO_iSoft 2021-02-11 16:27:50 durchflussaktuell 0 l/h
setstate JUDO_iSoft 2021-02-11 16:17:35 get-device data
setstate JUDO_iSoft 2021-02-11 16:27:50 get-device data
setstate JUDO_iSoft 2020-11-10 10:49:23 notifications_email 0
setstate JUDO_iSoft 2020-11-10 10:49:23 notifications_push 0
setstate JUDO_iSoft 2020-11-10 10:49:23 notifications_sms 0
setstate JUDO_iSoft 2021-02-11 16:27:50 rohhaerte 21 °dH
setstate JUDO_iSoft 2020-11-10 10:49:23 role customer
setstate JUDO_iSoft 2021-02-11 16:27:50 saltLevel 7750 g
setstate JUDO_iSoft 2021-02-11 16:27:50 saltRange 33 Tage
setstate JUDO_iSoft 2020-11-10 10:49:23 servicenumber
setstate JUDO_iSoft 2021-02-11 16:27:50 status ok
setstate JUDO_iSoft 2021-02-11 16:27:50 token einToken
setstate JUDO_iSoft 2021-02-11 16:27:50 waterTotal 30.344




Vielleicht klappt es mit dem ?!?

Grüße
Malte



ch.eick

Zitat von: maltejahn am 11 Februar 2021, 16:48:12
Bisher funktioniert es gut, allerdings gibt es auch wenig zu nutzen. Einzig den momentanen Durchfluss und die Gesamtmenge betrachte ich mir. Die Salzmenge - naja. So Smart ist das Teil nicht. Es scheint einfach nur 250g/Tag abzuziehen.
Bezieht sich das Save auf die Funktionalität? :-) Oder auf einen gesicherten Zugriff?
Gruß
    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

Kohle77

Hallo,
haben inzwischen auch eine i-Soft Safe.
Angefangen habe ich auch mit diesem Wicki https://wiki.fhem.de/wiki/JUDO_iSoft_Plus
Als erstes bin ich dort über drei / gestolpert in
attr JUDO_iSoft get01JSON data
attr JUDO_iSoft get01Name DeviceData
attr JUDO_iSoft get01URL https:///%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data


aber grundsätzlich bekomme ich auch readings angezeigt.
Habe aber das gleiche Problem. Was steckt hinter diesen Daten??

Hat inzwischen dort jemand Erfahrung wie man dort was richtiges angezeigt bekommt?

Gruß
Christian

ch.eick

Zitat von: Kohle77 am 09 August 2021, 06:08:33
Habe aber das gleiche Problem. Was steckt hinter diesen Daten??
Hallo Christian,
ich habe zwar eine iSoft Plus, aber die Daten werden sich nicht so sehr unterscheiden.
Wie sehen denn die gelieferten Daten aus, die Du mit "get device data bekommst?

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

Kohle77

Hallo,
das ist das Ergbniss aus dem Browser:
{"data":[{"serialnumber":"XXXXXXXXXXXX","installation_date":"2021-08-03T11:31:12","status":"online","sv":"2.10","hv":"3.0","data":[{"da":"0x1","dt":"0x33","sv":"2.11i","hv":"5.10","data":{"1":{"data":"690B02","st":"OK","er":""},"2":{"data":"0A05","st":"OK","er":""},"3":{"data":"0D710300","st":"OK","er":""},"5":{"data":"13131000","st":"OK","er":""},"6":{"data":"60FAABAB","st":"OK","er":""},"7":{"data":"A52000000000","st":"OK","er":""},"8":{"data":"89100000","st":"OK","er":""},"9":{"data":"090A0000","st":"OK","er":""},"10":{"data":"00","st":"OK","er":""},"12":{"data":"00","st":"OK","er":""},"14":{"data":"1B131000","st":"OK","er":""},"63":{"data":"24","st":"OK","er":""},"90":{"data":"0E00","st":"OK","er":""},"92":{"data":"0000","st":"OK","er":""},"93":{"data":"02010B64AF0B19000F","st":"OK","er":""},"94":{"data":"7ABCC100","st":"OK","er":""},"790":{"data":"0:00630F380000100006050E00FE01A30000000000000049006004100230006300","st":"OK","er":""},"791":{"data":"1:C00000000D40C7080D19E900040100007C000000000001006900910C07000800","st":"OK","er":""},"792":{"data":"2:003C1E000000000047000000A00F2C011E000306A00F2C010021B4031E0000AC","st":"OK","er":""},"793":null,"794":null,"lu":"9\/8\/2021 - 9:11:41"}}],"errors":[],"waterscene_time":null,"waterscene_time_garden":null,"waterscene_time_heater":null,"waterscene_time_washing":null,"waterscene":null,"disable_time":null,"waterscene_normal":"6","hardness_shower":"4","hardness_watering":"10","hardness_heater":"1","hardness_washing":"1","sleepmode_time":null,"holiday_mode":null,"update":"0"}],"status":"ok","token":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","command":"get device data"}

Gruß
Christian

ch.eick

Zitat von: Kohle77 am 09 August 2021, 09:24:53
Hallo,
das ist das Ergbniss aus dem Browser:
{"data":[{"serialnumber":"XXXXXXXXXXXX","installation_date":"2021-08-03T11:31:12","status":"online","sv":"2.10","hv":"3.0","data":[{"da":"0x1","dt":"0x33","sv":"2.11i","hv":"5.10","data":{"1":{"data":"690B02","st":"OK","er":""},"2":{"data":"0A05","st":"OK","er":""},"3":{"data":"0D710300","st":"OK","er":""},"5":{"data":"13131000","st":"OK","er":""},"6":{"data":"60FAABAB","st":"OK","er":""},"7":{"data":"A52000000000","st":"OK","er":""},"8":{"data":"89100000","st":"OK","er":""},"9":{"data":"090A0000","st":"OK","er":""},"10":{"data":"00","st":"OK","er":""},"12":{"data":"00","st":"OK","er":""},"14":{"data":"1B131000","st":"OK","er":""},"63":{"data":"24","st":"OK","er":""},"90":{"data":"0E00","st":"OK","er":""},"92":{"data":"0000","st":"OK","er":""},"93":{"data":"02010B64AF0B19000F","st":"OK","er":""},"94":{"data":"7ABCC100","st":"OK","er":""},"790":{"data":"0:00630F380000100006050E00FE01A30000000000000049006004100230006300","st":"OK","er":""},"791":{"data":"1:C00000000D40C7080D19E900040100007C000000000001006900910C07000800","st":"OK","er":""},"792":{"data":"2:003C1E000000000047000000A00F2C011E000306A00F2C010021B4031E0000AC","st":"OK","er":""},"793":null,"794":null,"lu":"9\/8\/2021 - 9:11:41"}}],"errors":[],"waterscene_time":null,"waterscene_time_garden":null,"waterscene_time_heater":null,"waterscene_time_washing":null,"waterscene":null,"disable_time":null,"waterscene_normal":"6","hardness_shower":"4","hardness_watering":"10","hardness_heater":"1","hardness_washing":"1","sleepmode_time":null,"holiday_mode":null,"update":"0"}],"status":"ok","token":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","command":"get device data"}

Gruß
Christian
In dem JSON sind doch die Bedeutungen bis auf einige Register recht gut zu erkennen.

sv => Software versin
hv => Hardware Version
waterscene_time_* => je nach Anwendungsfall wird man hier Zeiten Einstellen, bevor der Wasserstop aktiviert wird.
hardness_heater => da kann man sicher die Härte für das befüllen einer Heizugsanlage aktivieren
hardness_shower => für das Duschen diese Härte verwenden
hardness_watering => das dürfte die Härte für die Gartenbewässerung sein
hardness_washing => Das wäre eine geänderte Härte für die Verwendung beim Waschen
holiday_mode => die Anlage für den langen Urlaub preparieren


Hast Du eine App dazu? Da hatte ich bei mir die Zahlenwerte der Daten mit der App verglichen und dann zugeordnet.

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

Kohle77

Hi,
ja ich habe auch die App dazu. Wie komme ich z.B. auf Reichweite Salzvorrat 28 Wochen, ob der Leckageschutz aktiv ist?
Batterie Kapazität 100%, Batterielaufzeir 0 Stunden 25 min, Wasserdurchfluss?

Gruß
Christian

ch.eick

Zitat von: Kohle77 am 09 August 2021, 10:23:44
Wie komme ich z.B. auf Reichweite Salzvorrat 28 Wochen, ob der Leckageschutz aktiv ist?
Batterie Kapazität 100%, Batterielaufzeir 0 Stunden 25 min, Wasserdurchfluss?
Gibt es eventuell noch weitere Kommandos für die Abfrage außer "get device data" ?
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

Kohle77

Hi,
keine Ahnung. Wie würde den so eine Abfrage aussehen?
Momentan frage ich die Daten ja so ab:
https:///%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data

Gruß
Christian

ch.eick

#20
Zitat von: Kohle77 am 09 August 2021, 11:00:53
Hi,
keine Ahnung. Wie würde den so eine Abfrage aussehen?
Momentan frage ich die Daten ja so ab:
https:///%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data

Im Wiki steht folgendes
Zitat
JUDO iSoft Safe
auch auf der IP Adresse der iSoft Safe im lokalen Netzwerk bekommt man eine Übersichtsseite mit einigen Daten, die besten Ergebnisse hatte ich allerdings als ich Requests an #myJudo [[3]] geschickt habe. Ich habe hier nur die Änderungen zur Anleitung der JUDO iSoft Plus notiert.
Dem nach müssten die Definitionen der iSoft Plus eventuell auch bei der iSoft Save passen. Das müsstest Du mit den anderen "attr JUDO_iSoft get**URL ..." mal ausprobieren.
Sollte das klappen, dann habe ich in dem anderen Thread nach meiner Kenntnis die aktuellste Aufbereitung.

EDIT: mit  <ip-adresse>:8000 bekommst Du eventuell eine Liste aller möglichen Kommandos. Im Anhang ist ein Screenshot, wie das aussehen könnte.
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

Kohle77

Hi,
ich denke du meinst diese Abfragen:

attr JUDO_iSoft get01Name SerialNumber
attr JUDO_iSoft get01URL https://www.myjudo.eu/?group=spare%20part&command=serial%20number&msgnumber=5&token=%token%


Hab das aus dem Browser versucht mit
Zitathttps://www.myjudo.eu/?group=spare%20part&command=serial%20number&msgnumber=5&token=XXXXXXXXXXXXXXX
aber bekomme dann den login Bildschirm :-/

Gruß
Christian

ch.eick

Zitat von: Kohle77 am 09 August 2021, 11:37:09
ich denke du meinst diese Abfragen:

attr JUDO_iSoft get01Name SerialNumber
attr JUDO_iSoft get01URL https://www.myjudo.eu/?group=spare%20part&command=serial%20number&msgnumber=5&token=%token%

Das müsstest Du natürlich in Dein Device einfügen, damit der Login durchgeführt wird.
Achtung ein get01* hast Du bereits, also die Nummerierung ändern ;-)

Was kommt bei <ip-adresse>:8000  ?
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

Kohle77

Hi,
das ist das Problem. Auf der lokalen IP bekommt man von der i-Soft Plus wohl Werte, von der Safe eben nicht bzw. nur so etwas:
Infos:

2021-08-09T13:32:05

CntApp=262348144
CntInter=52556492
CntPerm=52480844
CntEep=5251066

Seconds since start: 520361

busDevice: da=0x1, dt=0x33, sv=2.11i, hv=5.10,OPERATING


Habe mit:
attr JUDO_iSoft get02Name TestSerialNr
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%/?group=spare%20part&command=serial%20number&msgnumber=5&token=%token%

die Zeilen hinzugefügt. Wenn ich es richtig verstehe und es funktionieren würde, müsste ein neues Reading mit dem Namen TestSerialNr
erzeugt werden hinter dem die seriennummer steht. Das funktioniert leider nicht.

Gruß
Christian

ch.eick

Zitat von: Kohle77 am 09 August 2021, 13:47:58
Habe mit:
attr JUDO_iSoft get02Name TestSerialNr
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%/?group=spare%20part&command=serial%20number&msgnumber=5&token=%token%

die Zeilen hinzugefügt. Wenn ich es richtig verstehe und es funktionieren würde, müsste ein neues Reading mit dem Namen TestSerialNr
erzeugt werden hinter dem die seriennummer steht. Das funktioniert leider nicht.
Es sollte ein httpbody zurück kommen.
Mit folgendem müsstest Du den genauen Kommunikationsablauf im Fhem Log sehe.

verbose 5
showBody 1
showError 1

Eventuell kannst Du ja mal den JUDO Service anschreiben und nach einer Beschreibung der API fragen.
Die i-soft plus ist KNX Bus fähig und hat eventuell deshalb eine erweiterte Kommunikation. Laut Prospekt hat die i-soft safe kein KNX.

Eventuell ist ja "safe" auch ein Schreibfehler und sollte "save" im Sinne von einsparen bedeuten :-) :-)
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

Kohle77

Hi,
mal ne blöde frage. In diesem string:
https://%JUDO_ipaddress%/?group=spare%20part&command=serial%20number&msgnumber=5&token=%token%
steht
Zitatserial%20number
aber die seriennummer steht doch in
Zitat%JUDO_serial%
?

Sollte diese nicht dort stehen?

2021.08.09 14:25:23 4: JUDO_iSoft2: HandleSendQueue sends get02 with timeout 5 to https://www.myjudo.eu/?group=spare%20part&command=XXXXXXXXXXXX&msgnumber=5&token=c12d12412c125ffbc7870524b12079b8, No Data,
header: Content-Type: application/json
Accept: */*
2021.08.09 14:25:23 5: JUDO_iSoft2: ReadCallback called from __ANON__
2021.08.09 14:25:23 4: JUDO_iSoft2: Read callback: request type was get02 retry 0,
header: HTTP/1.1 200 OK
Date: Mon, 09 Aug 2021 12:25:23 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Last-Modified: Sun, 01 Aug 2021 20:00:03 GMT
ETag: "c4b7-5c884e5f712c0"
Accept-Ranges: bytes
Content-Length: 50359
Connection: close
Content-Type: text/html; charset=UTF-8, body length 50359
2021.08.09 14:25:23 5: JUDO_iSoft2: Read callback: body
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
<head>
<---snipped---->


Soweit ich es sehe kommt einfach
Zitatno data
zurück.

Hast du eine Adresse bei Judo wo ich die API anfragen kann?

Gruß
Christian

ch.eick

#26
Zitat von: Kohle77 am 09 August 2021, 14:34:01
2021.08.09 14:25:23 4: JUDO_iSoft2: HandleSendQueue sends get02 with timeout 5 to https://www.myjudo.eu/?group=spare%20part&command=XXXXXXXXXXXX&msgnumber=5&token=c12d12412c125ffbc7870524b12079b8, No Data,

Soweit ich es sehe kommt einfach  zurück.

Hast du eine Adresse bei Judo wo ich die API anfragen kann?
Ich sehe gerade, dass Du die JUDO Webseite abfragst, das ist dann eine ganz andere Kommunikation wie bei mir.
Meine Abfrage geht direkt auf die i-soft plus! und fragt dort die z.B. die Seriennummer im Gerät ab.

Deshalb steht bei Dir die Seriennummer auch als reading gespeichert und wird bei der Webabfrage an das Portal übergeben.

Kannst Du denn das Portal im Browser abfragen und Deine gewünschten Werte dort finden?

P.S. Mein Kontakt bei JUDO ist noch den ganzen Monat im Urlaub ;-)
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

Kohle77

Hi,
das ist es ja das die safe eben nicht im lokalen Netz abgefragt werden kann.
Habe da noch gefunden beim IOBroker:
https://github.com/arteck/iobroker.judoisoft/blob/master/lib/dataConverter.js
Sieht so aus als hätte dort einer einen Converter für die Werte geschrieben aber scheint wieder für die Plus zu sein.

Gruß
Christian

ch.eick

Zitat von: Kohle77 am 09 August 2021, 14:48:24
Habe da noch gefunden beim IOBroker:
https://github.com/arteck/iobroker.judoisoft/blob/master/lib/dataConverter.js
Sieht so aus als hätte dort einer einen Converter für die Werte geschrieben aber scheint wieder für die Plus zu sein.
Da steht was drin von Notstrom und Batterie, das hat meine i-soft plus nicht, woraus ich ableite, dass es die i-soft safe sein könnte.

Dann sind sicher die langen Data Strings, die Informationen, die Du suchst und in dem Code findest Du die Entschlüsselung der Register.
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

Kohle77

Hallo,
der thread heist doch schon isfot Save (sollte Safe sein).
Habe ein paar Antworten von Judo erhalten:
ZitatMomentan haben wir leider keine Schnittstelle für eine direkte, lokale Bedienung. Infos hierzu kann ich nicht bereitstellen.

KNX ist, wie vom Kunde bereits beschrieben, nur durch das Störmelderelais möglich.

Wir arbeiten daran, eine lokale Bedienung zu ermöglichen. Hierzu ist jedoch ein Hard- und Softwareupdate erforderlich.

Verstehe zwar nicht was die lokale Bedienung mit der API zu tun hat aber was soll man machen.

Gruß
Christian

ch.eick

#30
Zitat von: Kohle77 am 12 August 2021, 15:22:52

Habe ein paar Antworten von Judo erhalten:
ZitatMomentan haben wir leider keine Schnittstelle für eine direkte, lokale Bedienung. Infos hierzu kann ich nicht bereitstellen.

KNX ist, wie vom Kunde bereits beschrieben, nur durch das Störmelderelais möglich.

Wir arbeiten daran, eine lokale Bedienung zu ermöglichen. Hierzu ist jedoch ein Hard- und Softwareupdate erforderlich.
Verstehe zwar nicht was die lokale Bedienung mit der API zu tun hat aber was soll man machen.
Auf der i-soft plus läuft lokal eine Rest-API, die bei der i-soft save nicht vorhanden ist.

Der letzte Satz vom Service ist der interessante:
Damit das bei der i-soft safe überhaupt möglich ist muss eine Baugruppe ausgetauscht werden auf der dann andere Firmware läuft.
Bei mir gab es auch zu Beginn einen Service Einsatz, da die Kommunikation zu JUDO mit der alten FW nicht ging. Dabei hat JUDO auch einige HW getauscht, weil der Service Techniker den FW upgrade nicht vor Ort machen konnte/wollte :-)
Ich mag mal bezweifeln, dass das für Bestandskunden kostenlos sein wird.

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

Moin, ich habe Infos von JUDO

zur Kommunikation hier abgelegt.

Gruß
   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

SebastianStorb

#32
Nachdem ich gelesen hatte, dass es in FHEM eine Möglichkeit zur Anbindung gibt hatte ich mich für den Kauf einer JuDo Anlage entschieden. Mir wurde vom Handwerksbetrieb (wegen des Chip-Mangels?) die JuDo iSoft SAFE+ empfohlen und ich musste auf das Connectivity Modul "nur" 3 Wochen warten. Das Modul wird (zur Zeit?) nicht automatisch ausgeliefert und muss über eine Internetseite bestellt werden. Das hatte nicht funktioniert, wodurch ich eine Woche verloren habe. Nach einem Anrufe wurde das Modul für mich bestellt und ich konnte es jetzt einbauen. (Mein Tipp: besser das Porto für die beiliegende Bestell-Postkarte ausgeben oder direkt anrufen)

Mit der hervorragenden Anleitung im Wiki und den hier geschriebenen Ergänzungen konnte ich die Anlage in FHEM integrieren.

Einerseits schaffe ich es nicht die SET Befehle umzusetzen (weil ich keine Ahnung von der Handhabung dieses Modules habe) und andererseits werden die Messergebnisse aus der Anlage in FHEM nicht korrekt dargestellt.

Meine 1. Frage: Wie sende ich set Befehle aus fhem in die Anlage?

Die folgenden Versuche funktionieren alle nicht:

attr JUDO_iSoft  set01Name  CloseValve
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%:8124/?group=waterstop&command=valve&msgnumber=1&token=%token%&parameter=close
attr JUDO_iSoft  set02Name  OpenValve
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%:8124/?group=waterstop&command=valve&msgnumber=1&token=%token%&parameter=open
attr JUDO_iSoft  set03Name  residual-hardness
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%:8124/?group=settings&command=residual%20hardness&msgnumber=1&token=%token%&parameter=$val

##ging nicht##

attr JUDO_iSoft  set01Name  CloseValve
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=valve&msgnumber=1&token=%token%&parameter=close
attr JUDO_iSoft  set02Name  OpenValve
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=valve&msgnumber=1&token=%token%&parameter=open
attr JUDO_iSoft  set03Name  residual-hardness
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=residual%20hardness&msgnumber=1&token=%token%&parameter=$val

##ging nicht##

attr JUDO_iSoft  set01Name  CloseValve
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%/interface/?group=waterstop&command&command=valve&msgnumber=1&token=%token%&parameter=close
attr JUDO_iSoft  set02Name  OpenValve
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%/interface/?group=waterstop&command&command=valve&msgnumber=1&token=%token%&parameter=open
attr JUDO_iSoft  set03Name  residual-hardness
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%/interface/?group=waterstop&command&command=residual%20hardness&msgnumber=1&token=%token%&parameter=$val

##ging auch nicht##



Meine 2. Frage:
Wie kann ich die Daten aus dem httpbody richtig in FHEM darstellen (bzw. umrechnen lassen)
Beispiel:
saltRange
25611 Tage

Wird in der JuDo App so dargestellt:
Reichweite Salzvorrat 26 Wochen
Ich hatte erfolglos versucht umzurechen:
saltRange { hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 4, 2)). / 1000" Tage" }
bringt aber immer 1600 Tage als Ergebnis.

Hier sind alle Daten meines Moduls aufgelistet. Wahrscheinlich sind viele Einträge falsch oder überflüssig, was ich jedoch nicht beurteilen kann. Alles über Copy und Paste bzw. Try and Error zusammengeschrieben:

Internals:
   BUSY       0
   DEF        https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token% 300
   FUUID      61fd5dda-f33f-ec85-82b9-86984c55d9fce48b
   FVERSION   98_HTTPMOD.pm:0.247080/2021-07-06
   Interval   300
   LastAuthTry 2022-02-05 13:23:42
   MainURL    https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token%
   ModuleVersion 4.1.10 - 6.7.2021
   NAME       JUDO_iSoft
   NOTIFYDEV  global
   NR         807
   NTFY_ORDER 50-JUDO_iSoft
   STATE      online
   TYPE       HTTPMOD
   httpbody   {"data":[{"serialnumber":"XXXXXXXXXX","installation_date":"2022-02-03T20:08:36","status":"online","sv":"1.12","hv":"1.0","data":[{"da":"0x1","dt":"0x33","sv":"2.11i","hv":"5.10","data":{"1":{"data":"690B02","st":"OK","er":""},"2":{"data":"0A05","st":"OK","er":""},"3":{"data":"557E0300","st":"OK","er":""},"5":{"data":"37001600","st":"OK","er":""},"6":{"data":"61E15E4A","st":"OK","er":""},"7":{"data":"282000000000","st":"OK","er":""},"8":{"data":"D2160000","st":"OK","er":""},"9":{"data":"760F0000","st":"OK","er":""},"10":{"data":"00","st":"OK","er":""},"12":{"data":"00","st":"OK","er":""},"14":{"data":"37001600","st":"OK","er":""},"63":{"data":"24","st":"OK","er":""},"90":{"data":"1300","st":"OK","er":""},"92":{"data":"0000","st":"OK","er":""},"93":{"data":"02010B64B10800000F","st":"OK","er":""},"94":{"data":"2DB4B800","st":"OK","er":""},"790":{"data":"0:00630F380000100006131300B4026F0000000000000055017F06160238006500","st":"OK","er":""},"791":{"data":"1:C0000000003A350F211ECD00ED00000071004C00000000000000910C10001000","st":"OK","er":""},"792":{"data":"2:003C1E000000000048000000A00FF4011E004306A00FF4010004B7031E000080","st":"OK","er":""},"793":null,"794":null,"lu":"5\/2\/2022 - 13:23:10"}}],"errors":[],"waterscene_time":null,"waterscene_time_garden":null,"waterscene_time_heater":null,"waterscene_time_washing":null,"waterscene":"normal","disable_time":"","waterscene_normal":"6","hardness_shower":"4","hardness_watering":"10","hardness_heater":"1","hardness_washing":"1","sleepmode_time":null,"holiday_mode":null,"update":"0"}],"status":"ok","token":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","command":"get device data"}
   value     
   CompiledRegexes:
   HttpUtils:
     NAME       
     addr       https://www.myjudo.eu:443
     auth       0
     buf       
     code       200
     compress   1
     conn       
     data       
     displayurl https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=get%20device%20data
     header     Content-Type: application/json
Accept: */*
     host       www.myjudo.eu
     httpheader HTTP/1.1 200 OK
Date: Sat, 05 Feb 2022 12:23:42 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Access-Control-Allow-Origin: *
Content-Length: 1634
Connection: close
Content-Type: application/json; charset=utf-8
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    443
     hu_portSfx
     ignoreredirects 1
     loglevel   4
     path       /interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=get%20device%20data
     protocol   https
     redirects  0
     timeout    5
     url        https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=get%20device%20data
     sslargs:
   QUEUE:
   READINGS:
     2022-02-05 13:23:43   DeviceData-1    0x1
     2022-02-05 13:23:43   DeviceData-10   OK
     2022-02-05 13:23:43   DeviceData-11   690B02
     2022-02-05 13:23:43   DeviceData-12   
     2022-02-05 13:23:43   DeviceData-13   OK
     2022-02-05 13:23:43   DeviceData-14   0A05
     2022-02-05 13:23:43   DeviceData-15   
     2022-02-05 13:23:43   DeviceData-16   OK
     2022-02-05 13:23:43   DeviceData-17   557E0300
     2022-02-05 13:23:43   DeviceData-18   
     2022-02-05 13:23:43   DeviceData-19   OK
     2022-02-05 13:23:43   DeviceData-2    00
     2022-02-05 13:23:43   DeviceData-20   37001600
     2022-02-05 13:23:43   DeviceData-21   
     2022-02-05 13:23:43   DeviceData-22   OK
     2022-02-05 13:23:43   DeviceData-23   24
     2022-02-05 13:23:43   DeviceData-24   
     2022-02-05 13:23:43   DeviceData-25   OK
     2022-02-05 13:23:43   DeviceData-26   61E15E4A
     2022-02-05 13:23:43   DeviceData-27   
     2022-02-05 13:23:43   DeviceData-28   OK
     2022-02-05 13:23:43   DeviceData-29   0:00630F380000100006131300B4026F0000000000000055017F06160238006500
     2022-02-05 13:23:43   DeviceData-3   
     2022-02-05 13:23:43   DeviceData-30   
     2022-02-05 13:23:43   DeviceData-31   OK
     2022-02-05 13:23:43   DeviceData-32   1:C0000000003A350F211ECD00ED00000071004C00000000000000910C10001000
     2022-02-05 13:23:43   DeviceData-33   
     2022-02-05 13:23:43   DeviceData-34   OK
     2022-02-05 13:23:43   DeviceData-35   2:003C1E000000000048000000A00FF4011E004306A00FF4010004B7031E000080
     2022-02-05 13:23:43   DeviceData-36   
     2022-02-05 13:23:43   DeviceData-37   OK
     2022-02-05 13:23:43   DeviceData-38   282000000000
     2022-02-05 13:23:43   DeviceData-39   
     2022-02-05 13:23:43   DeviceData-4    OK
     2022-02-05 13:23:43   DeviceData-40   OK
     2022-02-05 13:23:43   DeviceData-41   D2160000
     2022-02-05 13:23:43   DeviceData-42   
     2022-02-05 13:23:43   DeviceData-43   OK
     2022-02-05 13:23:43   DeviceData-44   1300
     2022-02-05 13:23:43   DeviceData-45   
     2022-02-05 13:23:43   DeviceData-46   OK
     2022-02-05 13:23:43   DeviceData-47   0000
     2022-02-05 13:23:43   DeviceData-48   
     2022-02-05 13:23:43   DeviceData-49   OK
     2022-02-05 13:23:43   DeviceData-5    00
     2022-02-05 13:23:43   DeviceData-50   02010B64B10800000F
     2022-02-05 13:23:43   DeviceData-51   
     2022-02-05 13:23:43   DeviceData-52   OK
     2022-02-05 13:23:43   DeviceData-53   2DB4B800
     2022-02-05 13:23:43   DeviceData-54   
     2022-02-05 13:23:43   DeviceData-55   OK
     2022-02-05 13:23:43   DeviceData-56   760F0000
     2022-02-05 13:23:43   DeviceData-57   
     2022-02-05 13:23:43   DeviceData-58   OK
     2022-02-05 13:23:43   DeviceData-59   5/2/2022 - 13:23:10
     2022-02-05 13:23:43   DeviceData-6   
     2022-02-05 13:23:43   DeviceData-60   0x33
     2022-02-05 13:23:43   DeviceData-61   5.10
     2022-02-05 13:23:43   DeviceData-62   2.11i
     2022-02-05 13:23:43   DeviceData-63   
     2022-02-05 13:23:43   DeviceData-64   1
     2022-02-05 13:23:43   DeviceData-65   4
     2022-02-05 13:23:43   DeviceData-66   1
     2022-02-05 13:23:43   DeviceData-67   10
     2022-02-05 13:23:43   DeviceData-68   1.0
     2022-02-05 13:23:43   DeviceData-69   2022-02-03T20:08:36
     2022-02-05 13:23:43   DeviceData-7    OK
     2022-02-05 13:23:43   DeviceData-70   XXXXXXXXXX
     2022-02-05 13:23:43   DeviceData-71   online
     2022-02-05 13:23:43   DeviceData-72   1.12
     2022-02-05 13:23:43   DeviceData-73   0
     2022-02-05 13:23:43   DeviceData-74   normal
     2022-02-05 13:23:43   DeviceData-75   6
     2022-02-05 13:23:43   DeviceData-8    37001600
     2022-02-05 13:23:43   DeviceData-9   
     2022-02-05 08:38:42   LAST_ERROR      read from https://www.myjudo.eu:443 timed out
     2022-02-05 13:23:43   command         get device data
     2022-02-05 13:23:43   data_01_data_01_da 0x1
     2022-02-05 13:23:43   data_01_data_01_data_10_data 00
     2022-02-05 13:23:43   data_01_data_01_data_10_er
     2022-02-05 13:23:43   data_01_data_01_data_10_st OK
     2022-02-05 13:23:43   data_01_data_01_data_12_data 00
     2022-02-05 13:23:43   data_01_data_01_data_12_er
     2022-02-05 13:23:43   data_01_data_01_data_12_st OK
     2022-02-05 13:23:43   data_01_data_01_data_14_data 37001600
     2022-02-05 13:23:43   data_01_data_01_data_14_er
     2022-02-05 13:23:43   data_01_data_01_data_14_st OK
     2022-02-05 13:23:43   data_01_data_01_data_1_data 690B02
     2022-02-05 13:23:43   data_01_data_01_data_1_er
     2022-02-05 13:23:43   data_01_data_01_data_1_st OK
     2022-02-05 13:23:43   data_01_data_01_data_2_data 0A05
     2022-02-05 13:23:43   data_01_data_01_data_2_er
     2022-02-05 13:23:43   data_01_data_01_data_2_st OK
     2022-02-05 13:23:43   data_01_data_01_data_3_data 557E0300
     2022-02-05 13:23:43   data_01_data_01_data_3_er
     2022-02-05 13:23:43   data_01_data_01_data_3_st OK
     2022-02-05 13:23:43   data_01_data_01_data_5_data 37001600
     2022-02-05 13:23:43   data_01_data_01_data_5_er
     2022-02-05 13:23:43   data_01_data_01_data_5_st OK
     2022-02-05 13:23:43   data_01_data_01_data_63_data 24
     2022-02-05 13:23:43   data_01_data_01_data_63_er
     2022-02-05 13:23:43   data_01_data_01_data_63_st OK
     2022-02-05 13:23:43   data_01_data_01_data_6_data 61E15E4A
     2022-02-05 13:23:43   data_01_data_01_data_6_er
     2022-02-05 13:23:43   data_01_data_01_data_6_st OK
     2022-02-05 13:23:43   data_01_data_01_data_790_data 0:00630F380000100006131300B4026F0000000000000055017F06160238006500
     2022-02-05 13:23:43   data_01_data_01_data_790_er
     2022-02-05 13:23:43   data_01_data_01_data_790_st OK
     2022-02-05 13:23:43   data_01_data_01_data_791_data 1:C0000000003A350F211ECD00ED00000071004C00000000000000910C10001000
     2022-02-05 13:23:43   data_01_data_01_data_791_er
     2022-02-05 13:23:43   data_01_data_01_data_791_st OK
     2022-02-05 13:23:43   data_01_data_01_data_792_data 2:003C1E000000000048000000A00FF4011E004306A00FF4010004B7031E000080
     2022-02-05 13:23:43   data_01_data_01_data_792_er
     2022-02-05 13:23:43   data_01_data_01_data_792_st OK
     2022-02-05 13:23:43   data_01_data_01_data_7_data 282000000000
     2022-02-05 13:23:43   data_01_data_01_data_7_er
     2022-02-05 13:23:43   data_01_data_01_data_7_st OK
     2022-02-05 13:23:43   data_01_data_01_data_8_data D2160000
     2022-02-05 13:23:43   data_01_data_01_data_8_er
     2022-02-05 13:23:43   data_01_data_01_data_8_st OK
     2022-02-05 13:23:43   data_01_data_01_data_90_data 1300
     2022-02-05 13:23:43   data_01_data_01_data_90_er
     2022-02-05 13:23:43   data_01_data_01_data_90_st OK
     2022-02-05 13:23:43   data_01_data_01_data_92_data 0000
     2022-02-05 13:23:43   data_01_data_01_data_92_er
     2022-02-05 13:23:43   data_01_data_01_data_92_st OK
     2022-02-05 13:23:43   data_01_data_01_data_93_data 02010B64B10800000F
     2022-02-05 13:23:43   data_01_data_01_data_93_er
     2022-02-05 13:23:43   data_01_data_01_data_93_st OK
     2022-02-05 13:23:43   data_01_data_01_data_94_data 2DB4B800
     2022-02-05 13:23:43   data_01_data_01_data_94_er
     2022-02-05 13:23:43   data_01_data_01_data_94_st OK
     2022-02-05 13:23:43   data_01_data_01_data_9_data 760F0000
     2022-02-05 13:23:43   data_01_data_01_data_9_er
     2022-02-05 13:23:43   data_01_data_01_data_9_st OK
     2022-02-05 13:23:43   data_01_data_01_data_lu 5/2/2022 - 13:23:10
     2022-02-05 13:23:43   data_01_data_01_dt 0x33
     2022-02-05 13:23:43   data_01_data_01_hv 5.10
     2022-02-05 13:23:43   data_01_data_01_sv 2.11i
     2022-02-05 13:23:43   data_01_disable_time
     2022-02-05 13:23:43   data_01_hardness_heater 1
     2022-02-05 13:23:43   data_01_hardness_shower 4
     2022-02-05 13:23:43   data_01_hardness_washing 1
     2022-02-05 13:23:43   data_01_hardness_watering 10
     2022-02-05 13:23:43   data_01_hv      1.0
     2022-02-05 13:23:43   data_01_installation_date 2022-02-03T20:08:36
     2022-02-05 13:23:43   data_01_serialnumber XXXXXXXXXX
     2022-02-05 13:23:43   data_01_status  online
     2022-02-05 13:23:43   data_01_sv      1.12
     2022-02-05 13:23:43   data_01_update  0
     2022-02-05 13:23:43   data_01_waterscene normal
     2022-02-05 13:23:43   data_01_waterscene_normal 6
     2022-02-05 13:23:42   notifications_email 0
     2022-02-05 13:23:42   notifications_push 0
     2022-02-05 13:23:42   notifications_sms 0
     2022-02-05 13:23:42   role            customer
     2022-02-05 13:23:43   saltLevel       301 g
     2022-02-05 13:23:43   saltRange       25611 Tage
     2022-02-05 13:23:42   servicenumber   
     2022-02-05 13:23:43   status          ok
     2022-02-05 13:23:43   token           XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     2022-02-05 13:23:43   waterProcessed  12104.749 m³
     2022-02-05 13:23:43   waterTotal      5.842 m³
   REQUEST:
     context    get
     data       
     header     Content-Type: application/json
Accept: */*
     ignoreredirects 0
     num        01
     priority   1
     retryCount 2
     type       get01
     url        https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
     value     
   defptr:
     readingBase:
       DeviceData-1 get
       DeviceData-10 get
       DeviceData-11 get
       DeviceData-12 get
       DeviceData-13 get
       DeviceData-14 get
       DeviceData-15 get
       DeviceData-16 get
       DeviceData-17 get
       DeviceData-18 get
       DeviceData-19 get
       DeviceData-2 get
       DeviceData-20 get
       DeviceData-21 get
       DeviceData-22 get
       DeviceData-23 get
       DeviceData-24 get
       DeviceData-25 get
       DeviceData-26 get
       DeviceData-27 get
       DeviceData-28 get
       DeviceData-29 get
       DeviceData-3 get
       DeviceData-30 get
       DeviceData-31 get
       DeviceData-32 get
       DeviceData-33 get
       DeviceData-34 get
       DeviceData-35 get
       DeviceData-36 get
       DeviceData-37 get
       DeviceData-38 get
       DeviceData-39 get
       DeviceData-4 get
       DeviceData-40 get
       DeviceData-41 get
       DeviceData-42 get
       DeviceData-43 get
       DeviceData-44 get
       DeviceData-45 get
       DeviceData-46 get
       DeviceData-47 get
       DeviceData-48 get
       DeviceData-49 get
       DeviceData-5 get
       DeviceData-50 get
       DeviceData-51 get
       DeviceData-52 get
       DeviceData-53 get
       DeviceData-54 get
       DeviceData-55 get
       DeviceData-56 get
       DeviceData-57 get
       DeviceData-58 get
       DeviceData-59 get
       DeviceData-6 get
       DeviceData-60 get
       DeviceData-61 get
       DeviceData-62 get
       DeviceData-63 get
       DeviceData-64 get
       DeviceData-65 get
       DeviceData-66 get
       DeviceData-67 get
       DeviceData-68 get
       DeviceData-69 get
       DeviceData-7 get
       DeviceData-70 get
       DeviceData-71 get
       DeviceData-72 get
       DeviceData-73 get
       DeviceData-74 get
       DeviceData-75 get
       DeviceData-8 get
       DeviceData-9 get
       command    get
       data_01_data_01_da get
       data_01_data_01_data_10_data get
       data_01_data_01_data_10_er get
       data_01_data_01_data_10_st get
       data_01_data_01_data_12_data get
       data_01_data_01_data_12_er get
       data_01_data_01_data_12_st get
       data_01_data_01_data_14_data get
       data_01_data_01_data_14_er get
       data_01_data_01_data_14_st get
       data_01_data_01_data_1_data get
       data_01_data_01_data_1_er get
       data_01_data_01_data_1_st get
       data_01_data_01_data_2_data get
       data_01_data_01_data_2_er get
       data_01_data_01_data_2_st get
       data_01_data_01_data_3_data get
       data_01_data_01_data_3_er get
       data_01_data_01_data_3_st get
       data_01_data_01_data_5_data get
       data_01_data_01_data_5_er get
       data_01_data_01_data_5_st get
       data_01_data_01_data_63_data get
       data_01_data_01_data_63_er get
       data_01_data_01_data_63_st get
       data_01_data_01_data_6_data get
       data_01_data_01_data_6_er get
       data_01_data_01_data_6_st get
       data_01_data_01_data_790_data get
       data_01_data_01_data_790_er get
       data_01_data_01_data_790_st get
       data_01_data_01_data_791_data get
       data_01_data_01_data_791_er get
       data_01_data_01_data_791_st get
       data_01_data_01_data_792_data get
       data_01_data_01_data_792_er get
       data_01_data_01_data_792_st get
       data_01_data_01_data_7_data get
       data_01_data_01_data_7_er get
       data_01_data_01_data_7_st get
       data_01_data_01_data_8_data get
       data_01_data_01_data_8_er get
       data_01_data_01_data_8_st get
       data_01_data_01_data_90_data get
       data_01_data_01_data_90_er get
       data_01_data_01_data_90_st get
       data_01_data_01_data_92_data get
       data_01_data_01_data_92_er get
       data_01_data_01_data_92_st get
       data_01_data_01_data_93_data get
       data_01_data_01_data_93_er get
       data_01_data_01_data_93_st get
       data_01_data_01_data_94_data get
       data_01_data_01_data_94_er get
       data_01_data_01_data_94_st get
       data_01_data_01_data_9_data get
       data_01_data_01_data_9_er get
       data_01_data_01_data_9_st get
       data_01_data_01_data_lu get
       data_01_data_01_dt get
       data_01_data_01_hv get
       data_01_data_01_sv get
       data_01_disable_time get
       data_01_hardness_heater get
       data_01_hardness_shower get
       data_01_hardness_washing get
       data_01_hardness_watering get
       data_01_hv get
       data_01_installation_date get
       data_01_serialnumber get
       data_01_status get
       data_01_sv get
       data_01_update get
       data_01_waterscene get
       data_01_waterscene_normal get
       notifications_email sid
       notifications_push sid
       notifications_sms sid
       role       sid
       servicenumber sid
       status     get
       token      get
     readingNum:
       DeviceData-1 01
       DeviceData-10 01
       DeviceData-11 01
       DeviceData-12 01
       DeviceData-13 01
       DeviceData-14 01
       DeviceData-15 01
       DeviceData-16 01
       DeviceData-17 01
       DeviceData-18 01
       DeviceData-19 01
       DeviceData-2 01
       DeviceData-20 01
       DeviceData-21 01
       DeviceData-22 01
       DeviceData-23 01
       DeviceData-24 01
       DeviceData-25 01
       DeviceData-26 01
       DeviceData-27 01
       DeviceData-28 01
       DeviceData-29 01
       DeviceData-3 01
       DeviceData-30 01
       DeviceData-31 01
       DeviceData-32 01
       DeviceData-33 01
       DeviceData-34 01
       DeviceData-35 01
       DeviceData-36 01
       DeviceData-37 01
       DeviceData-38 01
       DeviceData-39 01
       DeviceData-4 01
       DeviceData-40 01
       DeviceData-41 01
       DeviceData-42 01
       DeviceData-43 01
       DeviceData-44 01
       DeviceData-45 01
       DeviceData-46 01
       DeviceData-47 01
       DeviceData-48 01
       DeviceData-49 01
       DeviceData-5 01
       DeviceData-50 01
       DeviceData-51 01
       DeviceData-52 01
       DeviceData-53 01
       DeviceData-54 01
       DeviceData-55 01
       DeviceData-56 01
       DeviceData-57 01
       DeviceData-58 01
       DeviceData-59 01
       DeviceData-6 01
       DeviceData-60 01
       DeviceData-61 01
       DeviceData-62 01
       DeviceData-63 01
       DeviceData-64 01
       DeviceData-65 01
       DeviceData-66 01
       DeviceData-67 01
       DeviceData-68 01
       DeviceData-69 01
       DeviceData-7 01
       DeviceData-70 01
       DeviceData-71 01
       DeviceData-72 01
       DeviceData-73 01
       DeviceData-74 01
       DeviceData-75 01
       DeviceData-8 01
       DeviceData-9 01
       command    01
       data_01_data_01_da 01
       data_01_data_01_data_10_data 01
       data_01_data_01_data_10_er 01
       data_01_data_01_data_10_st 01
       data_01_data_01_data_12_data 01
       data_01_data_01_data_12_er 01
       data_01_data_01_data_12_st 01
       data_01_data_01_data_14_data 01
       data_01_data_01_data_14_er 01
       data_01_data_01_data_14_st 01
       data_01_data_01_data_1_data 01
       data_01_data_01_data_1_er 01
       data_01_data_01_data_1_st 01
       data_01_data_01_data_2_data 01
       data_01_data_01_data_2_er 01
       data_01_data_01_data_2_st 01
       data_01_data_01_data_3_data 01
       data_01_data_01_data_3_er 01
       data_01_data_01_data_3_st 01
       data_01_data_01_data_5_data 01
       data_01_data_01_data_5_er 01
       data_01_data_01_data_5_st 01
       data_01_data_01_data_63_data 01
       data_01_data_01_data_63_er 01
       data_01_data_01_data_63_st 01
       data_01_data_01_data_6_data 01
       data_01_data_01_data_6_er 01
       data_01_data_01_data_6_st 01
       data_01_data_01_data_790_data 01
       data_01_data_01_data_790_er 01
       data_01_data_01_data_790_st 01
       data_01_data_01_data_791_data 01
       data_01_data_01_data_791_er 01
       data_01_data_01_data_791_st 01
       data_01_data_01_data_792_data 01
       data_01_data_01_data_792_er 01
       data_01_data_01_data_792_st 01
       data_01_data_01_data_7_data 01
       data_01_data_01_data_7_er 01
       data_01_data_01_data_7_st 01
       data_01_data_01_data_8_data 01
       data_01_data_01_data_8_er 01
       data_01_data_01_data_8_st 01
       data_01_data_01_data_90_data 01
       data_01_data_01_data_90_er 01
       data_01_data_01_data_90_st 01
       data_01_data_01_data_92_data 01
       data_01_data_01_data_92_er 01
       data_01_data_01_data_92_st 01
       data_01_data_01_data_93_data 01
       data_01_data_01_data_93_er 01
       data_01_data_01_data_93_st 01
       data_01_data_01_data_94_data 01
       data_01_data_01_data_94_er 01
       data_01_data_01_data_94_st 01
       data_01_data_01_data_9_data 01
       data_01_data_01_data_9_er 01
       data_01_data_01_data_9_st 01
       data_01_data_01_data_lu 01
       data_01_data_01_dt 01
       data_01_data_01_hv 01
       data_01_data_01_sv 01
       data_01_disable_time 01
       data_01_hardness_heater 01
       data_01_hardness_shower 01
       data_01_hardness_washing 01
       data_01_hardness_watering 01
       data_01_hv 01
       data_01_installation_date 01
       data_01_serialnumber 01
       data_01_status 01
       data_01_sv 01
       data_01_update 01
       data_01_waterscene 01
       data_01_waterscene_normal 01
       notifications_email 01
       notifications_push 01
       notifications_sms 01
       role       01
       servicenumber 01
       status     01
       token      01
     readingOutdated:
     readingSubNum:
       DeviceData-1 -1
       DeviceData-10 -10
       DeviceData-11 -11
       DeviceData-12 -12
       DeviceData-13 -13
       DeviceData-14 -14
       DeviceData-15 -15
       DeviceData-16 -16
       DeviceData-17 -17
       DeviceData-18 -18
       DeviceData-19 -19
       DeviceData-2 -2
       DeviceData-20 -20
       DeviceData-21 -21
       DeviceData-22 -22
       DeviceData-23 -23
       DeviceData-24 -24
       DeviceData-25 -25
       DeviceData-26 -26
       DeviceData-27 -27
       DeviceData-28 -28
       DeviceData-29 -29
       DeviceData-3 -3
       DeviceData-30 -30
       DeviceData-31 -31
       DeviceData-32 -32
       DeviceData-33 -33
       DeviceData-34 -34
       DeviceData-35 -35
       DeviceData-36 -36
       DeviceData-37 -37
       DeviceData-38 -38
       DeviceData-39 -39
       DeviceData-4 -4
       DeviceData-40 -40
       DeviceData-41 -41
       DeviceData-42 -42
       DeviceData-43 -43
       DeviceData-44 -44
       DeviceData-45 -45
       DeviceData-46 -46
       DeviceData-47 -47
       DeviceData-48 -48
       DeviceData-49 -49
       DeviceData-5 -5
       DeviceData-50 -50
       DeviceData-51 -51
       DeviceData-52 -52
       DeviceData-53 -53
       DeviceData-54 -54
       DeviceData-55 -55
       DeviceData-56 -56
       DeviceData-57 -57
       DeviceData-58 -58
       DeviceData-59 -59
       DeviceData-6 -6
       DeviceData-60 -60
       DeviceData-61 -61
       DeviceData-62 -62
       DeviceData-63 -63
       DeviceData-64 -64
       DeviceData-65 -65
       DeviceData-66 -66
       DeviceData-67 -67
       DeviceData-68 -68
       DeviceData-69 -69
       DeviceData-7 -7
       DeviceData-70 -70
       DeviceData-71 -71
       DeviceData-72 -72
       DeviceData-73 -73
       DeviceData-74 -74
       DeviceData-75 -75
       DeviceData-8 -8
       DeviceData-9 -9
     requestReadings:
       auth01:
         notifications_email sid 01
         notifications_push sid 01
         notifications_sms sid 01
         role       sid 01
         servicenumber sid 01
         status     sid 01
         token      reading 01
       get01:
         DeviceData-1 get 01-1
         DeviceData-10 get 01-10
         DeviceData-11 get 01-11
         DeviceData-12 get 01-12
         DeviceData-13 get 01-13
         DeviceData-14 get 01-14
         DeviceData-15 get 01-15
         DeviceData-16 get 01-16
         DeviceData-17 get 01-17
         DeviceData-18 get 01-18
         DeviceData-19 get 01-19
         DeviceData-2 get 01-2
         DeviceData-20 get 01-20
         DeviceData-21 get 01-21
         DeviceData-22 get 01-22
         DeviceData-23 get 01-23
         DeviceData-24 get 01-24
         DeviceData-25 get 01-25
         DeviceData-26 get 01-26
         DeviceData-27 get 01-27
         DeviceData-28 get 01-28
         DeviceData-29 get 01-29
         DeviceData-3 get 01-3
         DeviceData-30 get 01-30
         DeviceData-31 get 01-31
         DeviceData-32 get 01-32
         DeviceData-33 get 01-33
         DeviceData-34 get 01-34
         DeviceData-35 get 01-35
         DeviceData-36 get 01-36
         DeviceData-37 get 01-37
         DeviceData-38 get 01-38
         DeviceData-39 get 01-39
         DeviceData-4 get 01-4
         DeviceData-40 get 01-40
         DeviceData-41 get 01-41
         DeviceData-42 get 01-42
         DeviceData-43 get 01-43
         DeviceData-44 get 01-44
         DeviceData-45 get 01-45
         DeviceData-46 get 01-46
         DeviceData-47 get 01-47
         DeviceData-48 get 01-48
         DeviceData-49 get 01-49
         DeviceData-5 get 01-5
         DeviceData-50 get 01-50
         DeviceData-51 get 01-51
         DeviceData-52 get 01-52
         DeviceData-53 get 01-53
         DeviceData-54 get 01-54
         DeviceData-55 get 01-55
         DeviceData-56 get 01-56
         DeviceData-57 get 01-57
         DeviceData-58 get 01-58
         DeviceData-59 get 01-59
         DeviceData-6 get 01-6
         DeviceData-60 get 01-60
         DeviceData-61 get 01-61
         DeviceData-62 get 01-62
         DeviceData-63 get 01-63
         DeviceData-64 get 01-64
         DeviceData-65 get 01-65
         DeviceData-66 get 01-66
         DeviceData-67 get 01-67
         DeviceData-68 get 01-68
         DeviceData-69 get 01-69
         DeviceData-7 get 01-7
         DeviceData-70 get 01-70
         DeviceData-71 get 01-71
         DeviceData-72 get 01-72
         DeviceData-73 get 01-73
         DeviceData-74 get 01-74
         DeviceData-75 get 01-75
         DeviceData-8 get 01-8
         DeviceData-9 get 01-9
         command    get 01
         data_01_data_01_da get 01
         data_01_data_01_data_10_data get 01
         data_01_data_01_data_10_er get 01
         data_01_data_01_data_10_st get 01
         data_01_data_01_data_12_data get 01
         data_01_data_01_data_12_er get 01
         data_01_data_01_data_12_st get 01
         data_01_data_01_data_14_data get 01
         data_01_data_01_data_14_er get 01
         data_01_data_01_data_14_st get 01
         data_01_data_01_data_1_data get 01
         data_01_data_01_data_1_er get 01
         data_01_data_01_data_1_st get 01
         data_01_data_01_data_2_data get 01
         data_01_data_01_data_2_er get 01
         data_01_data_01_data_2_st get 01
         data_01_data_01_data_3_data get 01
         data_01_data_01_data_3_er get 01
         data_01_data_01_data_3_st get 01
         data_01_data_01_data_5_data get 01
         data_01_data_01_data_5_er get 01
         data_01_data_01_data_5_st get 01
         data_01_data_01_data_63_data get 01
         data_01_data_01_data_63_er get 01
         data_01_data_01_data_63_st get 01
         data_01_data_01_data_6_data get 01
         data_01_data_01_data_6_er get 01
         data_01_data_01_data_6_st get 01
         data_01_data_01_data_790_data get 01
         data_01_data_01_data_790_er get 01
         data_01_data_01_data_790_st get 01
         data_01_data_01_data_791_data get 01
         data_01_data_01_data_791_er get 01
         data_01_data_01_data_791_st get 01
         data_01_data_01_data_792_data get 01
         data_01_data_01_data_792_er get 01
         data_01_data_01_data_792_st get 01
         data_01_data_01_data_7_data get 01
         data_01_data_01_data_7_er get 01
         data_01_data_01_data_7_st get 01
         data_01_data_01_data_8_data get 01
         data_01_data_01_data_8_er get 01
         data_01_data_01_data_8_st get 01
         data_01_data_01_data_90_data get 01
         data_01_data_01_data_90_er get 01
         data_01_data_01_data_90_st get 01
         data_01_data_01_data_92_data get 01
         data_01_data_01_data_92_er get 01
         data_01_data_01_data_92_st get 01
         data_01_data_01_data_93_data get 01
         data_01_data_01_data_93_er get 01
         data_01_data_01_data_93_st get 01
         data_01_data_01_data_94_data get 01
         data_01_data_01_data_94_er get 01
         data_01_data_01_data_94_st get 01
         data_01_data_01_data_9_data get 01
         data_01_data_01_data_9_er get 01
         data_01_data_01_data_9_st get 01
         data_01_data_01_data_lu get 01
         data_01_data_01_dt get 01
         data_01_data_01_hv get 01
         data_01_data_01_sv get 01
         data_01_disable_time get 01
         data_01_hardness_heater get 01
         data_01_hardness_shower get 01
         data_01_hardness_washing get 01
         data_01_hardness_watering get 01
         data_01_hv get 01
         data_01_installation_date get 01
         data_01_serialnumber get 01
         data_01_status get 01
         data_01_sv get 01
         data_01_update get 01
         data_01_waterscene get 01
         data_01_waterscene_normal get 01
         status     get 01
         token      get 01
   lastpoll:
     DeviceData 1644063818.03912
Attributes:
   authRetries 2
   enableControlSet 1
   extractAllJSON 1
   get01JSON  data
   get01Name  DeviceData
   get01Poll  1
   get01PollDelay 300
   get01URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
   get02JSON  data
   get02Name  WaterConsumptionDay
   get02URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%&date=%date%&parameter=day
   getHeader1 Content-Type: application/json
   getHeader2 Accept: */*
   group      JuDo
   reAuthRegex (error)|(login failed)
   reading01JSON data
   reading01Name token
   reading01Regex "token":"([^"]+)"
   reading02JSON group
   reading03JSON command
   reading03OExpr $val =~ s/\s/-/; $val; readingsBulkUpdate($hash,$val,ReadingsVal("JUDO_iSoft","data",""))
   replacement01Mode reading
   replacement01Regex %token%
   replacement01Value token
   replacement02Mode text
   replacement02Regex %JUDO_ipaddress%
   replacement02Value www.myjudo.eu
   replacement03Mode text
   replacement03Regex %JUDO_password%
   replacement03Value XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
   replacement04Mode text
   replacement04Regex %JUDO_username%
   replacement04Value XXXXXXXXXX
   replacement05Mode text
   replacement05Regex %JUDO_serial%
   replacement05Value XX:XX:XX:XX:XX:XX
   room       Garage
   set01Name  CloseValve
   set01URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=valve&msgnumber=1&token=%token%&parameter=close
   set02Name  OpenValve
   set02URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=valve&msgnumber=1&token=%token%&parameter=open
   set03Name  residual-hardness
   set03URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=residual%20hardness&msgnumber=1&token=%token%&parameter=$val
   showBody   1
   showError  1
   sid01ParseResponse 1
   sid01URL   https://%JUDO_ipaddress%/interface/?group=register&command=login&name=login&user=%JUDO_username%&password=%JUDO_password%&nohash=Service&role=customer
   stateFormat data_01_status
   timeout    5
   userReadings waterTotal { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 4, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 0, 2)) / 1000 ). ' m³'},
waterProcessed { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 4, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 0, 2)) / 1000 ). ' m³'},
saltLevel { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 0, 2))  ). ' g'},
saltRange { hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 4, 2)). " Tage" }
   userattr   replacement06Mode:reading,internal,text,expression,key replacement06Regex replacement06Value


Die lokale Oberfläche lässt sich aufrufen mit:
http://192.168.XXX.XXX/index.htm
Hier werden folgende Punkte angezeigt:
eWAC
Seriennummer
FW-Version
MAC address LAN
MAC address WLAN
Infos
CntApp=
CntInter=
CntPerm=
CntEep=
Seconds since start: 608657
busDevice: da=0x1, dt=0x33, sv=2.11i, hv=5.10,OPERATING


Ich komme leider nicht weiter - JuDo antwortet nicht auf meine Anfragen.

Vielen Dank für die tolle Vorarbeit bei diesem Modul. Über eine Lösung würde ich mich sehr freuen!

SebastianStorb

Die Anlage lässt sich bei mir bis heute nicht mit FHEM steuern (nur einige Readings auslesen). Daher war es für mich ein riesiger teurer Fehler diese Anlage zu kaufen. Die Motivation zum Kauf bei Judo kam aus der Annahme, dass es ein funktionierendes Modul bzw. eine funktionierende Möglichkeit gibt diese mit FHEM zu steuern. Die Foreneinträge und WiKi Einträge erwecken den Eindruck.

Ich kann nur jeden davor warnen sich für JuDo zu entscheiden. Support bei JuDo ist unterirdisch. Keine Antwort auf e-Mail Anfragen, Telefonische Antworten landen auf dem Anrufbeantworter. Klar dass von der Firma JuDo niemand zurückruft.

Wenn sich jemand JuDo kauft: dann nur exakt die Anlage, die im Wiki Beschrieben ist (dann könnte ich mir vorstellen, dass es funktioniert).

K E I N E  K A U F E M P F E H L U N G

KEINESFALLS die i-soft SAFE+
B E S S E R  N I C H T  J U D O !

Auch dieser Threat ist leider tot  >:(

ch.eick

#34
Zitat von: SebastianStorb am 19 Mai 2022, 21:54:53
Die Anlage lässt sich bei mir bis heute nicht mit FHEM steuern (nur einige Readings auslesen). Daher war es für mich ein riesiger teurer Fehler diese Anlage zu kaufen. Die Motivation zum Kauf bei Judo kam aus der Annahme, dass es ein funktionierendes Modul bzw. eine funktionierende Möglichkeit gibt diese mit FHEM zu steuern. Die Foreneinträge und WiKi Einträge erwecken den Eindruck.

Ich kann nur jeden davor warnen sich für JuDo zu entscheiden. Support bei JuDo ist unterirdisch. Keine Antwort auf e-Mail Anfragen, Telefonische Antworten landen auf dem Anrufbeantworter. Klar dass von der Firma JuDo niemand zurückruft.

Wenn sich jemand JuDo kauft: dann nur exakt die Anlage, die im Wiki Beschrieben ist (dann könnte ich mir vorstellen, dass es funktioniert).

K E I N E  K A U F E M P F E H L U N G

KEINESFALLS die i-soft SAFE+
B E S S E R  N I C H T  J U D O !

Auch dieser Threat ist leider tot  >:(

Moin,
kann das sein, dass Du eine Mischung des Judo Moduls und dem Judo HTTPMOD verwendest?
Die iSoft safe geht nur über das Judo Portal mit dem Modul.

Die normale iSoft (ohne safe) kann lokal kommunizieren, was dann über HTTPMOD gelöst wurde.
Dazu gehören dann auch die set Aufrufe, die Du aufgelistet hast. Diese gehören nicht zur iSoft safe .

Wenn Du nun eine iSoft Safe hast, dann geht nur das Modul (nicht HTTPMOD!), dass mit dem Judo Portal kommuniziert.

Ich habe die iSoft Plus und da hat leider Judo durch einen Firmware Bug die lokale Kommunikation gekilled. Die Firmware wurde durch Judo sofort bei mir vor Ort neu geladen, wodurch zumindest das Portal wieder verwendbar ist. Für die lokale Anbindung hatte ich noch keine Muße das wieder in Gang zu setzen. Vorhor hatte das Monitoring und auch das Setzen/Schalten tadellos funktioniert.

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

tobi01001

Hallo zusammen,

ich häng mich hier mal dran da wir im Sanierungsobjekt auch eine i-Soft eingebaut haben. Über das Connectivity Modul lässt diese sich über das Judo - Ju-Control Portal steuern.
Mit dem Wiki und diesem Thread hab ich mich dann dran gemacht die Werte nach Fhem zu bekommen und auch Werte an die anlage schicken zu können.

Mit der Starthilfe und dem Entwicklermodus konnte ich die Daten hinreichend entziffern und jemand der Modulentwicklung kann, könnte daraus theoretisch auch ein Judo-Modul basteln.

Jedenfalls implementiert die Internet-Version der Ju-Control alle Kontrollfähigen Judo-Geräte.
In den js-scripts kann man sich das Interface zusammensuchen und über die URL's, deren Payload und Response kann man sich den Rest erarbeiten.

Disclaimer:

  • habe ich kaum Erfahrung mit HTTPMOD
  • ist bei uns noch Baustelle und kein realistischer produktiver Einsatz. Die Readings sind auch noch etwas wild benannt....
  • habe ich noch nicht alle Daten die zurückkommen als Reading umgesetzt bzw. "dekodiert"
  • habe ich von den abgesetzten Kommandos bisher nur die Resthärte umgesetzt und das noch nicht an den jeweiligen Gerätetyp angepasst.
Das funktioniert soweit aber sehr gut.
[/list]

Nun zum eingemachten:
Die iSoft schickt in den Device Data jede Menge Werte (nach "data->id" geordnet), welche oft Hexadezimal und manchmal auch als Datenblock zurückgegeben werden. Die miesten brauchbaren Informationen stecken in den Datenblöcken.
Beispiel:

{"data":[
     ...,
     "data":[
        ...,
        "790":{
            "data":"0:00010F180000100007000E000702D70000000000000037000000110228006900",
            "st":"OK",
            "er":""
         }
         ,...
     ],
     ...
     "status":"ok",
     "token":"blablabla",
     "command":"get device data"
}

In deviceDataConverter.js?version=1.220 finden wir dazu dann:

// Auslesen der Datentabelle / Get_Tableread
        // 1 byte subcode (32 byte response)
        // SUBCODE 0
        case 790:
            value = "";
            if (data.length == 66) {
                if (subIndex !== null) {
                    data = data.toString().split(':')[1];
                    switch (subIndex) {

                        //Notstrommodul Ja/Nein
                        case 2:
                            value = parseInt("0x"+data.slice(2, 4));
                            value = (+value).toString(2);
                            while (value.length<8) value="0"+value;
                            break;

                        // Anzeige resthärte
                        case 8:
                            value = parseInt(data.slice(8*2, 9*2), 16);
                            break;

                        // Anzeige rohhärte / aktuelle Rohwasserhärte
                        case 10:
                            value = parseInt(data.slice(10*2, 11*2), 16);
                            break;

                        // Anzeige rohhärte / Rohwasserhärte1 in °dH
                        case 26:
                            value = parseInt(data.slice(26*2, 27*2),16);
                            break;

                        // Wasserdurchfluss
                        case 1617:
                            var tWW_DURCHFLUSS_LO = parseInt(data.slice(32, 34), 16);
                            var tWW_DURCHFLUSS_HI = parseInt(data.slice(34, 36), 16);
                            value = (tWW_DURCHFLUSS_HI * 256) + tWW_DURCHFLUSS_LO;
                            break;
                    }
                }else{

                }
            }
            break;

Also bekommen wir aus dem Block 790 die Informationen:

  • Notstrommodul Ja/Nein
  • resthärte - entspricht der Wunschwasserhärte
  • Rohwasserhärte
  • Rohwasserhärte in °dH - den Wert nehme ich zum Vergleich
  • Wasserdurchfluss - wenig sinnvoll, da Momentanwert vs. Polling

Das j-script sagt uns auch wo die Informationen im Block zu finden sind und damit können wir das schon im fhem auswerten und als Reading darstellen (Beispiel Resthärte):



attr JUDO_iSoft reading163Expr $val = substr($val,2);; hex(substr($val,16,2))
attr JUDO_iSoft reading163JSON data_01_data_01_data_790_data
attr JUDO_iSoft reading163Name Resthaerte

Dazu folgende kleine Erklärung:
$val = substr($val,2);; - entfernt lediglich die "0:" vorn. Das hat nur den Zweck, damit die späteren Indizes gleichbleibend zum JScript bleiben können (ansonsten -2 offset).
hex(substr($val,16,2)) - schnappt sich an Position 16 zwei Bytes und gibt den Hexwert als Dezimalwert zurück.

Ein DOIF setzt mir zudem zwei Readings täglich um 00:00 auf den Wert des Gesamtwasserverbrauchs und der Weichwassermenge. Zwei Userreadings zeigen dann über den Tag verteilt (als Differenz zum Gesamtverbrauch) den Tagesverbauch an Wasser. Dann braucht man dieses "get chart data" auch nicht, da man sich das selbst ausrechnen kann...

Mit dem Setzen der Resthärte kann man jetzt prima automatisch die Wunschhärte nach beliebigen Bedingungen setzen.
Eventuell kann man dafür aber auch die Wasserszenen nutzen. Die können mehr. Beispielsweise wird beim Aufruf die Zeit zur Rückkehr in "Normalbetrieb" mit übergeben und man könnte (noch nicht probiert) die genaue Zeit angeben (als UTC timestamp)... Das habe ich aber noch nicht umgesetzt.

Fazit:
Ich bin noch nicht am Ziel, aber ich glaube man kann damit so ziemlich alles machen, was ich mir vorgestellt habe. Einziger Wermutstropfen: Das Ding muss aktuell mit Judo kommunizieren (und fhem auch) und kann nicht im lokalen Netz gesteuert werden.

Hier noch meine Gerätedefinition:

defmod JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data 180
attr JUDO_iSoft authRetries 2
attr JUDO_iSoft enableControlSet 1
attr JUDO_iSoft event-min-interval .*:3600
attr JUDO_iSoft event-on-change-reading .*
attr JUDO_iSoft get01Name DeviceData
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
attr JUDO_iSoft get03CheckAllReadings 1
attr JUDO_iSoft get03Name DeviceInfo
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=show&application=JC
attr JUDO_iSoft get04CheckAllReadings 1
attr JUDO_iSoft get04Name LocationInfo
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=showlocation
attr JUDO_iSoft getHeader1 Content-Type: application/json
attr JUDO_iSoft getHeader2 Accept: */*
attr JUDO_iSoft icon wasserzaehler_icon
attr JUDO_iSoft reAuthRegex "data":"login failed"
attr JUDO_iSoft reading01JSON data
attr JUDO_iSoft reading01Name token
attr JUDO_iSoft reading01Regex "token":"([^"]+)"
attr JUDO_iSoft reading02JSON group
attr JUDO_iSoft reading03JSON command
attr JUDO_iSoft reading100JSON status
attr JUDO_iSoft reading100Name status
attr JUDO_iSoft reading101JSON data_01_holiday_mode
attr JUDO_iSoft reading101Name Urlaubsmodus
attr JUDO_iSoft reading102JSON data_01_sv
attr JUDO_iSoft reading102Name SW_Version_Connectivity_Modul
attr JUDO_iSoft reading103JSON data_01_hardness_heater
attr JUDO_iSoft reading103Name Wasserhärte_Heizung
attr JUDO_iSoft reading104JSON data_01_waterscene
attr JUDO_iSoft reading104Name Wasserszene
attr JUDO_iSoft reading105JSON data_01_waterscene_time_heater
attr JUDO_iSoft reading105Name Wasserdauer_Heizung
attr JUDO_iSoft reading106JSON data_01_data_01_hv
attr JUDO_iSoft reading106Name Version_Hardware
attr JUDO_iSoft reading107JSON data_01_data_01_data_3_data
attr JUDO_iSoft reading107Name Gerätenummer
attr JUDO_iSoft reading108JSON data_01_data_01_data_6_data
attr JUDO_iSoft reading108Name Inbetriebnahmedatum
attr JUDO_iSoft reading110Expr (hex(substr($val,2,2).substr($val,0,2)))
attr JUDO_iSoft reading110JSON data_01_data_01_data_90_data
attr JUDO_iSoft reading110Name Rohhaerte
attr JUDO_iSoft reading111JSON data_01_waterscene_normal
attr JUDO_iSoft reading111Name Wasserhärte_Normal
attr JUDO_iSoft reading113JSON data_01_hardness_watering
attr JUDO_iSoft reading113Name Wasserhärte_Garten
attr JUDO_iSoft reading114Expr sprintf("%d.%d",hex(substr($val,4,2)),hex(substr($val,4,2)))
attr JUDO_iSoft reading114JSON data_01_data_01_data_2_data
attr JUDO_iSoft reading114Name HW_Version
attr JUDO_iSoft reading115JSON data_hash
attr JUDO_iSoft reading115Name data_hash
attr JUDO_iSoft reading116JSON data_01_update_running
attr JUDO_iSoft reading116Name Update_Running
attr JUDO_iSoft reading117JSON data_01_serial number
attr JUDO_iSoft reading117Name Device_Serial
attr JUDO_iSoft reading118JSON data_01_device_update_status
attr JUDO_iSoft reading118Name Update_Status
attr JUDO_iSoft reading119JSON data_01_id
attr JUDO_iSoft reading119Name Device_ID
attr JUDO_iSoft reading120JSON data_01_location
attr JUDO_iSoft reading120Name Location
attr JUDO_iSoft reading121JSON data_01_ewac_update_status
attr JUDO_iSoft reading121Name ewac_update_status
attr JUDO_iSoft reading122JSON data_01_devicename
attr JUDO_iSoft reading122Name Name
attr JUDO_iSoft reading123JSON data_01_parameter
attr JUDO_iSoft reading123Name Parameter
attr JUDO_iSoft reading124JSON data_01_zipcode
attr JUDO_iSoft reading124Name Location_Postleitzahl
attr JUDO_iSoft reading125JSON data_01_description
attr JUDO_iSoft reading125Name Location_Description
attr JUDO_iSoft reading126JSON data_01_streetnumber
attr JUDO_iSoft reading126Name Location_Hausnummer
attr JUDO_iSoft reading127JSON data_01_city
attr JUDO_iSoft reading127Name Location_Stadt
attr JUDO_iSoft reading128JSON data_01_street
attr JUDO_iSoft reading128Name Location_Strasse
attr JUDO_iSoft reading129JSON data_01_country
attr JUDO_iSoft reading129Name Location_Land
attr JUDO_iSoft reading130Expr int(hex(substr($val,2,2).substr($val,0,2))/24)
attr JUDO_iSoft reading130JSON data_01_data_01_data_7_data
attr JUDO_iSoft reading130Name Wartung_Tage
attr JUDO_iSoft reading131Expr hex(substr($val,6,2).substr($val,4,2))
attr JUDO_iSoft reading131JSON data_01_data_01_data_7_data
attr JUDO_iSoft reading131Name Wartungen_Done
attr JUDO_iSoft reading132Expr hex(substr($val,10,2).substr($val,8,2))
attr JUDO_iSoft reading132JSON data_01_data_01_data_7_data
attr JUDO_iSoft reading132Name Wartungen_Ordered
attr JUDO_iSoft reading136JSON data_01_status
attr JUDO_iSoft reading136Name Geraetestatus
attr JUDO_iSoft reading138JSON token
attr JUDO_iSoft reading138Name token
attr JUDO_iSoft reading139JSON data_01_waterscene_time
attr JUDO_iSoft reading139Name Wasserdauer
attr JUDO_iSoft reading140Expr $val = substr($val,2);; hex(substr($val,0,2))
attr JUDO_iSoft reading140JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading140Name Wasserstop_State_STNDBY
attr JUDO_iSoft reading141Expr $val = substr($val,2);; hex(substr($val,18,2))
attr JUDO_iSoft reading141JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading141Name Wasserstop_STBY_Mode_Hours
attr JUDO_iSoft reading142Expr $val = substr($val,2);; hex(substr($val,36,2))
attr JUDO_iSoft reading142JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading142Name Wasserstop_Vacation_Mode
attr JUDO_iSoft reading143Expr $val = substr($val,2);; hex(substr($val,38,2))
attr JUDO_iSoft reading143JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading143Name Wasserstopp_Sleepmode_Time
attr JUDO_iSoft reading144Expr $val = substr($val,2);; hex(substr($val,26,2).substr($val,24,2))
attr JUDO_iSoft reading144JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading144Name Wasserstop_Throughput_Max
attr JUDO_iSoft reading145Expr $val = substr($val,2);; hex(substr($val,30,2).substr($val,28,2))
attr JUDO_iSoft reading145JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading145Name Wasserstop_Water_Max
attr JUDO_iSoft reading146Expr $val = substr($val,2);; hex(substr($val,34,2).substr($val,32,2))
attr JUDO_iSoft reading146JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading146Name Wasserstop_Water_Max_Time
attr JUDO_iSoft reading147Expr $val = substr($val,2);; hex(substr($val,60,2))
attr JUDO_iSoft reading147JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading147Name Wasserstop_Microleak_state
attr JUDO_iSoft reading148Expr $val = substr($val,2);; hex(substr($val,62,2).substr($val,60,2))
attr JUDO_iSoft reading148JSON data_01_data_01_data_791_data
attr JUDO_iSoft reading148Name Regenerationen
attr JUDO_iSoft reading149Expr $val = substr($val,2);; (hex(substr($val,0,2))&0x01)
attr JUDO_iSoft reading149JSON data_01_data_01_data_791_data
attr JUDO_iSoft reading149Name Status_Betrieb_Regeneration
attr JUDO_iSoft reading160JSON data_01_serialnumber
attr JUDO_iSoft reading160Name Seriennummer_MacAdresse
attr JUDO_iSoft reading162Expr $val = substr($val,2);; hex(substr($val,2,2))
attr JUDO_iSoft reading162JSON data_01_data_01_data_790_data
attr JUDO_iSoft reading162Name Notstrommodul
attr JUDO_iSoft reading163Expr $val = substr($val,2);; hex(substr($val,16,2))
attr JUDO_iSoft reading163JSON data_01_data_01_data_790_data
attr JUDO_iSoft reading163Name Resthaerte
attr JUDO_iSoft reading164Expr $val = substr($val,2);; hex(substr($val,20,2))
attr JUDO_iSoft reading164JSON data_01_data_01_data_790_data
attr JUDO_iSoft reading164Name Rohhaerte
attr JUDO_iSoft reading165Expr $val = substr($val,2);; hex(substr($val,52,2))
attr JUDO_iSoft reading165JSON data_01_data_01_data_790_data
attr JUDO_iSoft reading165Name Rohhaerte_dH
attr JUDO_iSoft reading166Expr $val = substr($val,2);; hex(substr($val,34,2).substr($val,32,2))
attr JUDO_iSoft reading166JSON data_01_data_01_data_790_data
attr JUDO_iSoft reading166Name Current_Throughput
attr JUDO_iSoft reading167Expr (hex(substr($val,2,2).substr($val,0,2))/1000)
attr JUDO_iSoft reading167JSON data_01_data_01_data_94_data
attr JUDO_iSoft reading167Name Salzvorrat_kg
attr JUDO_iSoft reading168Expr (hex(substr($val,6,2).substr($val,4,2)))
attr JUDO_iSoft reading168JSON data_01_data_01_data_94_data
attr JUDO_iSoft reading168Name Salzvorrat_Reichweite_Tage
attr JUDO_iSoft reading169JSON data_01_installation_date
attr JUDO_iSoft reading169Name Installationsdatum
attr JUDO_iSoft reading170JSON data_01_data_01_sv
attr JUDO_iSoft reading170Name SW_Version
attr JUDO_iSoft reading171JSON data_01_hv
attr JUDO_iSoft reading171Name HW_Version
attr JUDO_iSoft reading174JSON data_01_update
attr JUDO_iSoft reading174Name Update
attr JUDO_iSoft reading175Expr (hex(substr($val,6,2).substr($val,4,2)))." Tage, ".(hex(substr($val,2,2)))." Stunden ".hex(substr($val,0,2))." Minuten"
attr JUDO_iSoft reading175JSON data_01_data_01_data_14_data
attr JUDO_iSoft reading175Name Uptime
attr JUDO_iSoft reading176Expr hex(substr($val,6,2).substr($val,4,2).substr($val,2,2).substr($val,0,2))
attr JUDO_iSoft reading176JSON data_01_data_01_data_9_data
attr JUDO_iSoft reading176Name Weichwassermenge
attr JUDO_iSoft reading177JSON data_01_hardness_shower
attr JUDO_iSoft reading177Name Wasserhärte_Duschen
attr JUDO_iSoft reading184JSON data_01_waterscene_time_garden
attr JUDO_iSoft reading184Name Wasserdauer_Garten
attr JUDO_iSoft reading188Expr sprintf("%d.%d",hex(substr($val,4,2)),hex(substr($val,4,2)))
attr JUDO_iSoft reading188JSON data_01_data_01_data_1_data
attr JUDO_iSoft reading188Name SW_Version
attr JUDO_iSoft reading191Expr (hex(substr($val,6,2).substr($val,4,2).substr($val,2,2).substr($val,0,2)))
attr JUDO_iSoft reading191JSON data_01_data_01_data_8_data
attr JUDO_iSoft reading191Name Gesamtwasserverbrauch
attr JUDO_iSoft reading193JSON data_01_hardness_washing
attr JUDO_iSoft reading193Name Wasserhärte_Waschen
attr JUDO_iSoft reading196JSON data_01_data_01_data_lu
attr JUDO_iSoft reading196Name Lokale_Zeit
attr JUDO_iSoft reading198Expr ((hex(substr($val,6,2).substr($val,4,2)))*24+(hex(substr($val,2,2)))).":".sprintf("%02d", hex(substr($val,0,2)))
attr JUDO_iSoft reading198JSON data_01_data_01_data_5_data
attr JUDO_iSoft reading198Name Betriebsstunden
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 www.myjudo.eu
attr JUDO_iSoft replacement03Mode text
attr JUDO_iSoft replacement03Regex %JUDO_password%
attr JUDO_iSoft replacement03Value [b]"Passwort als MD5 Hash"[/b]
attr JUDO_iSoft replacement04Mode text
attr JUDO_iSoft replacement04Regex %JUDO_username%
attr JUDO_iSoft replacement04Value [b]Ju-Control_Benutzername[/b]
attr JUDO_iSoft replacement05Mode text
attr JUDO_iSoft replacement05Regex %nohash%
attr JUDO_iSoft replacement05Value [b]"Passwort als Klartext"[/b] - [i]War bei mir im Aufruf so mit drin. Bin mir nicht sicher ob das auch ohne funktioniert. Wahrschienlich schon..[/i]
attr JUDO_iSoft replacement06Mode reading
attr JUDO_iSoft replacement06Regex %date%
attr JUDO_iSoft replacement06Value date
attr JUDO_iSoft replacement07Mode reading
attr JUDO_iSoft replacement07Regex %JUDO_serial%
attr JUDO_iSoft replacement07Value Seriennummer_MacAdresse
attr JUDO_iSoft room temp
attr JUDO_iSoft set01Hint 1,2,3,4,5,6,7,8,9,10
attr JUDO_iSoft set01Max 10
attr JUDO_iSoft set01Min 1
attr JUDO_iSoft set01Name Resthaerte
attr JUDO_iSoft set01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x32&index=60&da=0x1&role=customer&action=normal&data=$val
attr JUDO_iSoft showError 1
attr JUDO_iSoft sid01ParseResponse 1
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%/interface/?group=register&command=login&name=login&user=%JUDO_username%&password=%JUDO_password%&nohash=%nohash%&role=customer
attr JUDO_iSoft stateFormat Gesamtverbrauch i-Soft: Gesamtwasserverbrauch Liter <br> Weichwasser: Weichwassermenge Liter<br>Salzvorrat: Salzvorrat_kg kg<br>Salzreichweite: Salzvorrat_Reichweite_Tage
attr JUDO_iSoft timeout 5
attr JUDO_iSoft userReadings Tagesverbrauch_Wasser {ReadingsVal("JUDO_iSoft","Gesamtwasserverbrauch",0) - ReadingsVal("JUDO_iSoft","Tagesstartwert_Verbrauch",0);;},Tagesweichwasser {ReadingsVal("JUDO_iSoft","Weichwassermenge",0) - ReadingsVal("JUDO_iSoft","Tagesstartwert_Weichwasser",0);;}

setstate JUDO_iSoft 2022-06-27 21:50:52 token blablabla

Das setstate am Ende ist relativ wichtig. Der Token darf beim Aufruf nicht leer sein. Ohne token kommt vom Server gar nichts zurück und dann funktioniert (zumindest der hier definierte) re-auth Mechanismus nicht und man bekommt keinen Token und keine Daten...


ToDo:

  • Andere Get/Set-Befehle mit Einbinden / Urlaubsmode etc...) - bei Szenen mit Sleepmodus ist das nicht soo leicht, da beim umschalten noch eine Sicherheitsabfrage zur Bestätigung kommt
  • Gerätetyp mit Auswerten / Anzeigen (Parameter "dt" - device type). Mein iSoft is 0x32 - eine iSoft  :)
  • Warnung Salzvorrat und evtl andere Meldungen
  • ...





Viele Grüße,
Toby
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

SebastianStorb

#36
Hallo Tobi,

das ist der erste JuDo Beitrag im Forum, der bei mir funktioniert. Ich habe seit Februar fast jeden Abend etwas anderes in FHEM probiert. Immer wieder die Forenbeiträge studiert - ohne Erfolg.

Jetzt bin ich extrem happy, dass jetzt endlich mal etwas geklappt hat! Gratulation, dass du es geschafft hast! (Ich kann leider nur copy und paste bzw. try and error und verstehe das Thema httpmod überhaupt nicht).

Hast Du eine Idee, warum ich die Wasserhärte nicht verstellen kann (gibt es irgendwo eine Fehlermeldung)? Wenn ich zB von 6 auf 1 stellen möchte passiert nichts - auch FHEM "zuckt" noch nicht einmal. Woher ist Dir die SET Adresse bekannt? Kann ich diese für meinen www.Judo.eu Zugang irgendwo herausfinden? Vielleicht stimmt dieser für meinen Zugang so in dieser Form nicht?

https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x32&index=60&da=0x1&role=customer&action=normal&data=$val

Hier mal mein Inhalt vom Body (ich hoffe da sind keine Zugangsdaten von mir drin ::) ):

{"data":[{"serialnumber":"XXXXXXXX","installation_date":"2022-02-03T20:08:36","status":"online","sv":"1.12","hv":"1.0","data":[{"da":"0x1","dt":"0x33","sv":"2.11i","hv":"5.10","data":{"1":{"data":"690B02","st":"OK","er":""},"2":{"data":"0A05","st":"OK","er":""},"3":{"data":"557E0300","st":"OK","er":""},"5":{"data":"2606AE00","st":"OK","er":""},"6":{"data":"61E14D84","st":"OK","er":""},"7":{"data":"E21100000000","st":"OK","er":""},"8":{"data":"3AD60000","st":"OK","er":""},"9":{"data":"44970000","st":"OK","er":""},"10":{"data":"00","st":"OK","er":""},"12":{"data":"00","st":"OK","er":""},"14":{"data":"2606AE00","st":"OK","er":""},"63":{"data":"24","st":"OK","er":""},"90":{"data":"1300","st":"OK","er":""},"92":{"data":"0000","st":"OK","er":""},"93":{"data":"02010B64B20A03000F","st":"OK","er":""},"94":{"data":"5D2F4200","st":"OK","er":""},"790":{"data":"0:00630F300000110006071300A202DE000000000000004D0BEF05160238003B00","st":"OK","er":""},"791":{"data":"1:C0000000004040120C18C300D400000000000000000001003800910C34019800","st":"OK","er":""},"792":{"data":"2:003C1E000000000047000000A00FF4011E004306A00FF4010016B7031E000000","st":"OK","er":""},"793":null,"794":null,"lu":"7\/7\/2022 - 18:53:35"}}],"errors":[],"waterscene_time":null,"waterscene_time_garden":null,"waterscene_time_heater":null,"waterscene_time_washing":null,"waterscene":"normal","disable_time":"","waterscene_normal":"1","hardness_shower":"4","hardness_watering":"10","hardness_heater":"1","hardness_washing":"1","sleepmode_time":null,"holiday_mode":null,"update":"0"}],"status":"ok","token":"19af0932a03cf11151ab0182aa86b1b6","command":"get device data"}

Es wäre sensationell, wenn Du noch eine Idee zum Steuern meine Anlage über FHEM hättest.

Viele Grüße

Sebastian :)


tobi01001

Hallo Sebastian,

schön dass du damit was anfangen kannst. Das setzen der Wunschhärte funktioniert wahrscheinlich wegen den angeführten Punkten 3 und 4 noch nicht.
Ich werde das noch in Readings umbauen.
In deinem Fall scheint es auf dem ersten Blick der Device Type zu sein (habe ich fest auf i-Soft dt=0x32 gesetzt). Aus deinen Daten lese ich ein dt=0x33.
Für den ersten Versuch bitte mal den device type auf 0x33 im set Aufruf setzten:

attr JUDO_iSoft set01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&da=0x1&role=customer&action=normal&data=$val


Schau mal ob das direkt funktioniert (wird im fhem erst mit der nächsten regulären Abfrage oder einem manuellen reread aktualisiert) und melde kurz zurück.

Gruß,
Tobi




PS: Etwas mehr Details zum Vorgehen und nachvollziehen:

Zugangsdaten sind im Body nicht drin. Serial hast du rausgenommen. Der Token ist noch zu finden. Aber ich glaube mit dem allein kann man nix anrichten...

Was fhem sendet und zurück bekommt, siehst du (oder jemand anderes) am Besten wenn du attr JUDO_iSoft verbose 5 setzt, den Aufruf ausführst und dann im Log nachschaust. Da ist dann ziemlich viel drin - inklusive der Antwort.

Was du über JU-Control machst, kannst du z.B. folgendermaßen nachverfolgen:
In einen Chromium-Basierten Browser (Chrome, Edge) die Seite zum Steuern deiner i-Soft aufrufen.
Mit Strg+Shift+i den Entwicklermodus starten.
Unter den Reiter Network (bei mir ist Englisch eingestellt) ist oben links ein "Aufnahmeknopf", ist der rot wird bereits aufgezeichnet und du siehst die zyklischen Abfragen der App (was wir in Fhem nachgebaut haben).
Wenn die Aufnahme läuft bei JU-Control unter Einstellungen die Wasserhärte ändern und warten bis die Seite sich aktualisiert hat. Dann (optional) den Aufnahmeknopf pausieren.
Du findest dann im Entwicklermodus unter Name die Aufrufe und wenn du einen anklickst unter den Reitern "Header (roh), Payload (lesbar formatiert)" den Aufruf (wir suchen command "write data") und unter "Preview / Response" die Antwort.
Beim setzen kommt bei mir als Antwort lediglich "ok" und der Token. Der Aufruf ist interessanter:

Header:
https://www.myjudo.eu/interface/?token=tokentokentokenf&group=register&command=write data&serial_number=meineSerial&dt=0x32&index=60&data=5&da=0x1&role=customer&action=normal

Das habe ich in fhem eingebaut.
Wie gesagt, die entsprechenden Daten werde ich noch als Reading einpflegen, dann muss man dt und da nicht manuell setzen.

Was passiert, wenn einer mehrere Geräte hat, wäre noch spannend... Aber das soll erstmal nicht "unser Problem" sein. ;-)

Achso, im Entwicklermodus kannst du unter "Sources" noch die j-script Quellen finden. Da du nur "Copy&Paste" machst, ist das wahrscheinlich weniger interessant. Aber da stehen in der Tat allerhand Informationen drin, die man direkt verarbeiten kann (wie z.B. das dekodieren der Rohwerte oder der Device-Type):
0x32 für meine "i-soft" und 0x33 für deine "i-soft safe".

        case '67': // 0x43
        case '50': // 0x32
            device_name = 'i-soft';
            break;
        case '55': // 0x37
            device_name = 'i-soft TGA';
            break;
        case '66': // 0x42
        case '51': // 0x33
            device_name = 'i-soft safe';
            break;
        case '52': // 0x34
            device_name = 'Softwell P';
            break;
        case '53': // 0x35
            device_name = 'Softwell S';
            break;
        case '54': // 0x36
            device_name = 'Softwell K';
            break;
        case '56': // 0x38
            device_name = 'QUICKSOFT-M';
            break;
        case '57': // 0x39
            device_name = 'QUICKSOFT-P';
            break;
        case '60': // 0x3C
            device_name = 'i-fill';
            break;
        case '96': // 0x60
            device_name = 'i-fill (Demo)';
            break;
        case '88': // 0x3A
            device_name = 'i-soft UNI';
            break;
        case '65': // 0x41
        case '61': // 0x3D
            device_name = 'i-dos-ewac';
            break;
        case '68':
            device_name = 'ZEWA i-SAFE';
            break;


FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

SebastianStorb

#38
Hallo Tobi,

Deine Anleitung ist SUPER! Es hat zwar mit dem Deinem Code nicht geklappt, aber ich habe es geschafft einige Informationen zu bekommen (diese habe ich formatiert, falls jemand mal ein Modul schreiben sollte):

i-soft SAFE+
Normalbetrieb:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=201&data=2&da=0x1&role=customer&sleeptime=&action=normal&disable_time=

Duschen:
-1 Stunde
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=1&action=shower&disable_time=1657349540

attr JUDO_iSoft set02Name Duschen
attr JUDO_iSoft set02URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=2&action=shower&disable_time=1657471355
attr JUDO_iSoft set02NoArg 1


-2 Stunden
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=2&action=shower&disable_time=1657355759

Gartenbewässerung:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=203&data=10&da=0x1&role=customer&sleeptime=1&action=watering&disable_time=1657349826

attr JUDO_iSoft set03Name Gartenbewässerung
attr JUDO_iSoft set03URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=203&data=10&da=0x1&role=customer&sleeptime=1&action=watering&disable_time=1657467708
attr JUDO_iSoft set03NoArg 1



Heizungsbefüllung:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=204&data=1&da=0x1&role=customer&sleeptime=2&action=heaterfilling&disable_time=1657353308

attr JUDO_iSoft set04Name Heizungsbefüllung
attr JUDO_iSoft set04URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=204&data=1&da=0x1&role=customer&sleeptime=2&action=heaterfilling&disable_time=1657471416
attr JUDO_iSoft set04NoArg 1


Waschen:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=205&data=1&da=0x1&role=customer&sleeptime=1&action=washing&disable_time=1657353543

attr JUDO_iSoft set05Name Waschen
attr JUDO_iSoft set05URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=205&data=1&da=0x1&role=customer&sleeptime=2&action=washing&disable_time=1657471461
attr JUDO_iSoft set05NoArg 1


Wasser absperren und entsperren:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=72&data=&da=0x1&role=customer

attr JUDO_iSoft set06Name Wasserstopp
attr JUDO_iSoft set06URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=72&data=&da=0x1&role=customer
attr JUDO_iSoft set06NoArg 1


attr JUDO_iSoft set07Name WasserstoppEnde
attr JUDO_iSoft set07URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=73&data=&da=0x1&role=customer
attr JUDO_iSoft set07NoArg 1


Urlaubsmodus:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=77&data=3&da=0x1&role=customer

attr JUDO_iSoft set08Name Urlaubsmodus
attr JUDO_iSoft set08URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=77&data=3&da=0x1&role=customer
attr JUDO_iSoft set08NoArg 1


attr JUDO_iSoft set09Name UrlaubsmodusEnde
attr JUDO_iSoft set09URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=73&data=&da=0x1&role=customer
attr JUDO_iSoft set09NoArg 1


Kleinleckageprüfung starten:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=e8eb1bee727d&dt=0x33&index=115&data=&da=0x1&role=customer

attr JUDO_iSoft set10Name Kleinlekageprüfung
attr JUDO_iSoft set10URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=115&data=&da=0x1&role=customer
attr JUDO_iSoft set10NoArg 1


Härtegrad einstellen (für die Voreinstellungen)
WUNSCHHÄRTE:
1 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=1&da=0x1&role=customer&action=normal
2 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=2&da=0x1&role=customer&action=normal
3 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=3&da=0x1&role=customer&action=normal
4 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=4&da=0x1&role=customer&action=normal
5 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=5&da=0x1&role=customer&action=normal
6 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=6&da=0x1&role=customer&action=normal
7 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=7&da=0x1&role=customer&action=normal
8 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=8&da=0x1&role=customer&action=normal
9 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=9&da=0x1&role=customer&action=normal
10 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=a&da=0x1&role=customer&action=normal
11 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=b&da=0x1&role=customer&action=normal
12 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=c&da=0x1&role=customer&action=normal
13 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=d&da=0x1&role=customer&action=normal


Anfragen die immer wieder automatisch (ohne dass ich etwas mache) generiert werden:<-unbedeutend
https://www.myjudo.eu/interface/?token=%token%&group=register&command=showlocation
https://www.myjudo.eu/interface/?token=%token%&group=register&command=show&application=JC
https://www.myjudo.eu/interface/?token=%token%&group=register&command=get device data


Fehlermeldungen:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=get error messages&data_hash=0b493105621a93cb7f1416d9144e58fe

Leider habe ich es (mit try and error malwieder) nicht geschafft über FHEM in der Anlage irgendetwas zu bewirken. Folgendes hat nicht funktioniert:

attr JUDO_iSoft set01Hint 1657349540,1657355759
attr JUDO_iSoft set01Max 1657355759
attr JUDO_iSoft set01Min 1657349540


Hier habe ich jeweils nur am Ende des Codes minimal variiert:
a)attr JUDO_iSoft set01URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=1&action=shower&disable_time=
b) attr JUDO_iSoft set01URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=1&action=shower&disable_time=$va
c) attr JUDO_iSoft set01URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=1&action=shower&disable_time=1657349540

Könntest Du mir den Code sagen, den ich probieren könnte? Falls nicht zu schwierig auch z.B. für 10 Minuten?

Ein Problem könnte folgendes sein
funktioniert nicht:
write data
vs
funktioniert nicht:
=red]writedata
funktioniert:
vs
write%20data
Durch das Formatieren geändert. Im Original mit %20. Durch Copy und Paste entsteht ein Leerzeichen. Hier im Beitrag habe ich es wieder so geändert wie im Entwicklermodus des Chrome Browsers gezeigt.
Es funktioniert aber so oder so nicht - ich habe beide Versionen getestet. Ich muss z.Z. bei mir noch die Seriennummer verwenden - warum %JUDO_serial% ist mir aber momentan nicht wichtig.


Die CR ist für mich leider wieder völlig unverständlich, aber ich habe die passende Stelle mal herausgesucht.
If a parameter to a set command is not numeric but should be passed on to the device as text, then you can specify the attribute setTextArg. For example:
attr PM set01TextArg
If a set command should not require a parameter at all, then you can specify the attribute NoArg. For example:
attr PM set03Name On attr PM set03NoArg


Was auch nicht funktioniert:
attr JUDO_iSoft set01TextArg 1

Außerdem ist mir noch aufgefallen, dass der zu sendende Befehl in der Judo Weboberfläche immer doppelt ausgesendet wird. Dannach kommen Anfragen, die immer wieder automatisch generiert werden.

Was funktioniert:
Wenn ich die ganz o.g. Codezeilen einfach in den Browser kopiere und absende, macht die Anlage was Sie soll.

z.B. (hier anonymisiert) zurückstellen zum Normalbetrieb:
https://www.myjudo.eu/interface/?token=96XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=write%20data&serial_number=XXXXXXXXXXXX&dt=0x33&index=201&data=6&da=0x1&role=customer&sleeptime=&action=normal&disable_time=

:) :) :)
NACH 7 1/2 Stunden try and error:

ES KLAPPT ICH HABE OBEN SO GUT ES GEHT MEINE ERKENNTNISSE EINGEBRACHT!!!!

Nicht so wichtig:
(Interessant ist, dass auch mit der JuDo App z.B. das Absperren des Wasser und beenden des Urlaubsmodus nicht umkehrbar ist. Hierzu muss ich dann an das Bedienfeld Anlage. Das habe ich mit auch mit einer 2. JudoBox, die ich noch hatte und an der Anlage ausgetauscht habe, probiert. Dieser Fehler besteht sogar noch nach dem Zurücksetzen der Anlage auf Werkeinstellungen. Das wird evlt. ein BUG sein - ach nee das wird ein Feature, wenn ich bei Judo anrufe ;)))

TOBI - DU BIST DER BESTE!!!


PSS: Extrem verwunderlich. Mir ist jetzt das erste Mal aufgefallen, dass Änderungen in der App (und jetzt auch in Fhem) überhaupt keine Änderungen in der Anlage verursachen. Hier werde ich wohl (leider) noch mal einen Versuch starten im JuDo Support jemanden zu erreichen

tobi01001

#39
Hi Sebastian,

ich habe es jetzt nicht im Detail angeschaut. Zuerst mal sehr schön, dass es bei dir funktioniert und du selbst weiter kommst. Ein paar Kommentare / Optionen zur Verbesserung (habe keine safe, von daher geht bei mir einiges nicht - bzw kann ich von fhem aus gerade eh nicht probieren).

Mit dem set01 Befehl den ich bereits eingebaut hatte, kann man direkt die Wunschhärte setzen. ...&data=$val
Über attr JUDO_iSoft set01Hint 1,2,3,4,5,6,7,8,9,10
attr JUDO_iSoft set01Max 10
attr JUDO_iSoft set01Min 1
werden die möglichen Werte bereits vorgegeben/eingeschränkt. Damit kann man sich seine Wunschhärte in Kombination mit anderen Bedingungen bereits selbst bauen (ohne der judo eine Szene zu machen ;-)).

Beim setzen deiner/der Szenen (nicht verifiziert):
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=1&action=shower&disable_time=1657349540


  • data=4
    • Wunschwasserhärte kann dann direkt als Parameter mit übergeben werden
  • sleeptime=1
    • Dauer in Stunden in denen der Leckagealarm/Schutz deaktiviert wird - glaube ich zumindest ...
  • action=shower
    • Englische Bezeichung der Szene. Wird in .js files meist in Deutsch verwendet, aber in English als Parameter übergeben...
  • disable_time=1657349540
    • Das ist einer der wichtigen Parameter: Er gibt an, wann du wieder auf Normalbetrieb zurück schaltest. (UTC Zeit + Offset für Zeitzone) Damit kann man die Dauer "sekundengenau" festlegen. Allerdings ist mir die Abhängigkeit / Verbindung zu Sleeptime noch nicht klar.

EDIT:
Das manuelle setzen von Wasserszenen inkl. Parameter (ob modifiziert oder nicht) hat bei mir zu keinen zuverlässigen Ergebnissen geführt. Eher war der Status der Anlage dann online, in Fhem und physisch nicht mehr konsistent... Zudem komme bei Deaktivierung des Sleepmodus in der Online App eine Sicherheitsabfrage. Die müsste man noch separat bedienen, was mir im Moment recht aufwändig scheint. Ich werde das mal beobachten...
/EDIT

Die Online Version holt sich das alles direkt aus den gespeicherten Parametern. Wir haben diese bereits als Readings (zumindest die meisten). Aber über den Aufruf kann man die direkt mit ändern.
Ich denke, dass mir die Wunschwasserhärte in den meisten Fällen ausreicht. Über fhem kann ich mir die in Abhängigkeit irgendwelcher Ereignisse setzen wie ich es mag und/oder brauche.

Die Frage ist, was du brauchst bzw. willst. Die Wasserszenen wurden ja von Judo erstellt, um es dem Nutzer einfach zu machen. Aber mit fhem und der Möglichkeit der Fernsteuerung haben wir ja ein viel mächtigeres Tool als starre Wasserszenen mit starren Zeiten...


Ich werde demnächst mal die Device-Definition ändern und etwas "generischer" gestalten (zumindest kann ich es versuchen). Leider hab ich im Moment nicht allzuviel Zeit über.
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

SebastianStorb

#40
Hey Tobi, das hört sich ja richtig gut an!

Erstaunlicher Weise funktioniert die Steuerung jetzt bei mir wieder (evlt zu viele Anfragen an einem Tag?): Wenn ich im WebFrontend über FHEM etwas einstellte ändert sich der Parameter in der Anlage wie oben in der Fettschrift gezeigt. Nur Geduld braucht es dazu. Etwa bis zu 60 Sekunden kann es dauern bis der Befehl wirklich umgesetzt ist und im Jodo Web angezeigt wird bzw. die Anlage den Befehl auch umgesetzt hat.

Mit deinem set01 Befehl funktionierte es bei mir leider gar nicht. Jetzt habe ich noch etwas genauer wegen der Grad dH Einstellungen nachgeschaut. Hier sind die Parameter für die Einstellung der Wasserhärte aus meiner Anlage:

1 Grad Härte
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=1&da=0x1&role=customer&action=normal
2 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=2&da=0x1&role=customer&action=normal
3 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=3&da=0x1&role=customer&action=normal
4 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=4&da=0x1&role=customer&action=normal
5 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=5&da=0x1&role=customer&action=normal
6 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=6&da=0x1&role=customer&action=normal
7 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=7&da=0x1&role=customer&action=normal
8 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=8&da=0x1&role=customer&action=normal
9 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=9&da=0x1&role=customer&action=normal
10 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=a&da=0x1&role=customer&action=normal
11 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=b&da=0x1&role=customer&action=normal
12 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=c&da=0x1&role=customer&action=normal
13 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=d&da=0x1&role=customer&action=normal


Es läuft hoch von 1&da bis 9&da dann wechselt es von a&da bis d&da


Ich werde das noch mal bei mir probieren und ggf. anpassen. Allerdings habe ich schon 10 set Befehle und mehr funktionieren scheinbar nicht, oder?

Deine Fragen:
1.) Sleeptime=1 bedeutet AN (das mach natürlich nur Sinn wenn eine Zeit mit gesendet wird)

Sleeptime=0 bedeutet AUS

oder Sleepteime= bedeutet auch AUS bzw. nicht gesetzt

2.) Die Abhängigkeit bzw. das Mitsenden der Sleeptime vermute ich wie folgt:
Wenn z.B. bei der Gartenbewässerung oder z.B. Schwimmbad-Befüllung die Wassermenge deutlich über dem Limit liegt, würde die Anlage sich selber den Hahn zudrehen, wenn das Limit erreicht ist. Daher wird der Sleeptimer (der den Wasserstop pausiert) mitgesendet.

3.) (UTC Zeit + Offset für Zeitzone)
d.h. also
disable_time=1657349540
16:57 Uhr und 34 Sekunden

Bevor Du mir Deine extrem gute Idee mit UTC hier verraten hast, hatte ich die Vermutung, dass noch eine Szene mitgesendet wird oder es ist eine Quersumme oder noch komplizierter ist. Noch eine Idee war, das  noch der Tag des Monats mitgegeben wird (wie im METAR Wetterbereich in der Fliegerei).

JETZT VERMUTE ICH ES IST a) die (Absende-) Zeit in UTC und dann die Soll (bzw. Laufzeit) in Sekunden. Könnte das sein?

Wobei es extrem ungenau wäre (also die Uhren bei Judo etwa 15 Minuten zu spät gehen würden).

Ich entferne beim Senden des Befehls z.Z. einfach die Zeit weg und lasse FHEM später wieder auf Normalbetrieb stellen. Das wäre natürlich super, wenn das irgendwann gehen sollte.

LG Sebastian


PS: Des Rätsels Lösung ist: Das sind die Sekunden, die seit dem 01.01.1970 vergangen sind. EpochConverter (unixtimestamp.com) - nur so etwas einzubauen benötigt einen Programmierer  ;D

tobi01001

Zitat von: SebastianStorb am 11 Juli 2022, 19:14:19
Mit deinem set01 Befehl funktionierte es bei mir leider gar nicht.
Der Device Type muss auf 0x33 angepasst werden. Und bei dir steht noch action=normal dabei. Das braucht man aber nicht, wenn man die Wasserhärte für den Normalbetrieb (per App über die Einstellungen) ändert...
Zitat
Es läuft hoch von 1&da bis 9&da dann wechselt es von a&da bis d&da
My bad... soweit habe ich nicht probiert. Offenbar wird die Wasserhärte Hexadezimal gesendet. Das fällt bei kleiner 10 nicht so auf ;-)

P.S.: Der Parametername folgt nach dem & und der Wert nach dem =, also läuft es hoch von data=1 bis data=d (=13). Wobei minimal und maximal mögliche Wasserhärte von der Rohhärte abhängen.

Zitat
Ich werde das noch mal bei mir probieren und ggf. anpassen. Allerdings habe ich schon 10 set Befehle und mehr funktionieren scheinbar nicht, oder?
Warum nicht, bzw. wofür brauchst du überhaupt mehr als 10 Set Befehle?
Zitat
Deine Fragen:
1.) Sleeptime=1 bedeutet AN (das mach natürlich nur Sinn wenn eine Zeit mit gesendet wird)

Sleeptime=0 bedeutet AUS

oder Sleepteime= bedeutet auch AUS bzw. nicht gesetzt

Nee, ich bin mir ziemlich sicher es bedeutet An (Sleep) für x Stunden (Ganzzahl) bzw 0 oder nix für aus.

Zitat
2.) Die Abhängigkeit bzw. das Mitsenden der Sleeptime vermute ich wie folgt:
Wenn z.B. bei der Gartenbewässerung oder z.B. Schwimmbad-Befüllung die Wassermenge deutlich über dem Limit liegt, würde die Anlage sich selber den Hahn zudrehen, wenn das Limit erreicht ist. Daher wird der Sleeptimer (der den Wasserstop pausiert) mitgesendet.

Ja, wobei es bei mir nur Alarm gäbe, da keine "safe". Aber die Frage nach unterschiedlichen Zeitangaben bleibt... Und ob eine Gartenbewässerung (geht bei mir eh an der Anlage vorbei) ohne Wasserstop in Sleep funktioniert (und sinnvoll ist).

Zitat
PS: Des Rätsels Lösung ist: Das sind die Sekunden, die seit dem 01.01.1970 vergangen sind. EpochConverter (unixtimestamp.com) - nur so etwas einzubauen benötigt einen Programmierer  ;D

Nee, braucht keinen Programmierer. gettimeofday()+3*HOURSECONDS sind 3 Stunden in der Zukunft. Alternativ mit time(). Ob da jetzt die Zeitzone bereits mit drin ist, weiß ich grad nicht... Das kann man als Parameter mit übergeben falls man nach einer gewissen Zeit zurück möchte. Aber es gibt ja meist vielfältige Wege...

Gruß,
Tobi
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

SebastianStorb

#42
ZitatDer Device Type muss auf 0x33 angepasst werden. Und bei dir steht noch action=normal dabei. Das braucht man aber nicht, wenn man die Wasserhärte für den Normalbetrieb (per App über die Einstellungen) ändert...
Den Device Type habe ich angepasst auf 0x33. Leider funktioniert es bei mir nicht. Die Action normal ist bei mir in jedem Fall erforderlich, weil Sonst die Timer aus den Szenen nicht gelöscht werden (z.B. wenn meine Frau eine Szene mit der Handy App eingestellt hat).

ZitatP.S.: Der Parametername folgt nach dem & und der Wert nach dem =, also läuft es hoch von data=1 bis data=d (=13). Wobei minimal und maximal mögliche Wasserhärte von der Rohhärte abhängen.
Bekomme ich leider auch nicht in FHEM umgesetzt.

Hier das Ende Deines Code:
da=0x1&role=customer&action=normal&data=$val
Das ist die Erfordernis an meinem Code Ende (für Grad 1 dH)
data=1&da=0x1&role=customer&action=normal
Ich habe überhaupt keine Ahnung wie ich das umsetzen sollte. Mit dem enfachen Wechsel auf 0x33 (da kann ich mich nur wiederholen) funktioniert es definitiv leider nicht.

ZitatWarum nicht, bzw. wofür brauchst du überhaupt mehr als 10 Set Befehle?
s. meinen Post #38 am 09 Juli 2022, 08:56:55. Dort sind unter den Fett markierten Überschriften die Attribute von mir gepostet worden

lg S

tobi01001

Zitat von: SebastianStorb am 12 Juli 2022, 19:31:06

Hier das Ende Deines Code:
da=0x1&role=customer&action=normal&data=$val
Das ist die Erfordernis an meinem Code Ende (für Grad 1 dH)
data=1&da=0x1&role=customer&action=normal

Ja, und bis auf die Reihenfolge und den Wert als Parameter ist das identisch. Und die Reihenfolge macht bei get aufrufen keinen Unterschied. Der Empfänger muss das eh parsen...
Der einzige Unterschied den ich noch sehe: ich habe die website (myjudo.eu) über Replacement - sprich %JUDO_ipaddress% drin und bei dir ist direkt die komplette URL.

Entweder postest du mal den Log-Eintrag mit Verbose 5 um zu sehen was raus geht und zurück kommt. Oder einfach auch mal deine Device Spezifikation. (Löschen von sensiblen Daten nicht vergessen.)

Bzgl Anzahl der set-Befehle: Deswegen hatte ich ja gefragt ;-) Die Wasserszenen und die Wunschhärte kann man ja jeweils in einem set Befehl zusammenfassen. Bekommen wir gemeinsam hin.
Die Attribute set[0-9]+IExpr und set[0-9]+IMap sollten sich dafür als hilfreich erweisen.

Gruß,
Tobi
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

SebastianStorb

#44
Du hast wieder Recht gehabt! Es funktioniert jetzt mit dem Code den ich unten gepostet habe. Aber ich muss meine Seriennummer eingeben und nicht %JUDO_serial%

s.u.

Mit der Seriennummer bzw. %JUDO_serial% ist wahrscheinlich irgendwo noch ein Copy&Paste Problem.

Aber: Die Einstellung wird nur im Bereich
https://www.myjudo.eu / Ju-Control / ->Einstellungen->Wasserwunschhärte
eingestellt.
Eine Übernahme in den Normalbetrieb unter
https://www.myjudo.eu / Ju-Control / ->Betriebsstaus ->Wunschwasserhärte
erfolgt leider nicht.
Hier muss erst eine andere Wasserszene z.B. Duschen eingestellt werden. Wenn dann wieder Normalbetrieb eingestellt wird übernimmt die JU die Wunschwasserhärte in den Normalbetrieb.

Im Browser wird immer noch folgendes hinterhergesendet:
https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=showlocation
https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=show&application=JC
https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=get device data


Ich muss es in den nächsten Tagen in den Log Dateien verfolgen. Als folge Deines (mit 33 abgewandelten) Code stellt sich die Anlage nach ca 1 Minute immer auf 13 dH. Egal in welcher Wasserszene, egal was wo eingestellt ist.

Hi Tobi - wahrscheinlich wirst Du es nicht glauben aber es liegt an der Reihenfolge im Code. So funktioniert es jetzt problemlos:
https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=write%20data&serial_number=HierMussImmerNochMeineSeriennummerRein&dt=0x33&index=60&data=$val&da=0x1&role=customer&action=normal

--> Die Anlage hängt sich auf. Der Code funktioniert nur wenn auch nicht
a) die Anlage (nach dem Einstellen einer Wasserszene) auf Werkeinstellungen gesetzt wurde und
b) keine Wasserszene eingestellt worden ist.

[/s]
Was auch noch nicht 100%ig geht ist das Problem, dass ich es bei den Judo Szenen (die ich wirklich praktisch finde) noch immer etwas hakelig ist. Ich bekomme es nicht hin den 01.01.1970 Code einzupflegen.

Hier der Auszug aus dem Logfile (mit dem ich nichts anfangen kann bzw. mir ist nicht klar was ich ändern muss, damit es funktionieren könnte).
2022.07.16 08:18:55 4: JUDO_iSoft: BodyDecode is not decoding the response body (charset utf-8, bodyDecode defaults to none)
2022.07.16 08:18:55 4: JUDO_iSoft: extracted JSON values to internal
2022.07.16 08:18:55 5: JUDO_iSoft: GetCookies is looking for Cookies
2022.07.16 08:18:55 5: JUDO_iSoft: ExtractSid called, context set, num 09
2022.07.16 08:18:55 4: JUDO_iSoft: checking for redirects, code=200, ignore=0
2022.07.16 08:18:55 4: JUDO_iSoft: no redirects to handle
2022.07.16 08:18:55 5: JUDO_iSoft: Read callback sets LAST_REQUEST to set09
2022.07.16 08:18:55 5: JUDO_iSoft: CheckAuth is checking buffer with ReAuthRegex (?^:"data":"login failed")
2022.07.16 08:18:55 5: JUDO_iSoft: CheckAuth decided no authentication required


022.07.16 08:18:55 5: JUDO_iSoft: set called with Resthaerte 6
2022.07.16 08:18:55 5: JUDO_iSoft: set found option Resthaerte in attribute set09Name
2022.07.16 08:18:55 5: JUDO_iSoft: checkRange for SetFn checks 6 against min 1
2022.07.16 08:18:55 5: JUDO_iSoft: checkRange for SetFn checks 6 against max 10
2022.07.16 08:18:55 4: JUDO_iSoft: set will now set Resthaerte -> 6
2022.07.16 08:18:55 5: JUDO_iSoft: AddToQueue adds type set09 to URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data, no data, no headers, retry 0, initial queue len: 0
2022.07.16 08:18:55 5: JUDO_iSoft: HandleSendQueue called from AddToSendQueue, qlen = 1
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%token%), mode reading, value token input: https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace: reading value is XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2022.07.16 08:18:55 5: JUDO_iSoft: Replace: match for type set09, regex (?^:%token%), mode reading, value token, input: https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data, result is https://%JUDO_ipaddress%/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%JUDO_ipaddress%), mode text, value www.myjudo.eu input: https://%JUDO_ipaddress%/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace: match for type set09, regex (?^:%JUDO_ipaddress%), mode text, value www.myjudo.eu, input: https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data, result is https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%JUDO_password%), mode text, value xxxxxxxxxxxxxxxxxxxxxxxxxinput: https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%JUDO_username%), mode text, value xxxxxxxxxxxxxxxxxxxxxxxxxxx input: https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%nohash%), mode text, value xxxxxxxxxxxxxxx input: https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%date%), mode reading, value date input: https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%JUDO_serial%), mode reading, value xxxxxxxxxxxxxx input: https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 4: JUDO_iSoft: HandleSendQueue sends set09 with timeout 5 to https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data, No Data, No Header
2022.07.16 08:18:55 5: JUDO_iSoft: ReadCallback called from __ANON__
2022.07.16 08:18:55 4: JUDO_iSoft: Read callback: request type was set09 retry 0,
header: HTTP/1.1 200 OK


Ich befürchte, dass das Modul oder die Anlage oder die Kommunikation zwischen meinem Modul und Anlage nicht mehr funktioniert. Auch wenn ich im Judo-Webforntend etwas einstelle. z.B. Wasserszene Duschen, springt es zwar zunächst um, aber nach etwa 1 Minute ändert sich sie Wasserhärte. Gestern zu 12 Grad dH heute ist es 6 Grad dH.

Kannst Du mir Deine FHEM Definition für die Judo Logdatei sagen? Ich bekomme auch das nicht hin und muss immer mühsam im globalen Logfile nachsehen.

tobi01001

Zitat von: SebastianStorb am 14 Juli 2022, 20:18:30
%JUDO_serial%

Mit der Seriennummer bzw. %JUDO_serial% ist wahrscheinlich irgendwo noch ein Copy&Paste Problem.

Aber: Die Einstellung wird nur im Bereich
https://www.myjudo.eu / Ju-Control / ->Einstellungen->Wasserwunschhärte
eingestellt.
Eine Übernahme in den Normalbetrieb unter
https://www.myjudo.eu / Ju-Control / ->Betriebsstaus ->Wunschwasserhärte
erfolgt leider nicht.
Hier muss erst eine andere Wasserszene z.B. Duschen eingestellt werden. Wenn dann wieder Normalbetrieb eingestellt wird übernimmt die JU die Wunschwasserhärte in den Normalbetrieb.

Das Problem sind die Spielereien mit den Wasserszenen. Da passiert offenbar mehr als ein einfacher HTTP-Request. Entweder in der Web-App oder im Hintergrund oder in der Kombination.
Daher verzichte ich auch auf die Wasserszenen. Nach ein paar Stunden / Tagen erholt sich die Anlage auf wundersame Weise - zumindest bei mir.
Wenn man über HTTPMod nicht an den Wasserszenen rumstellt, sondern nur die "normale" Wasserhärte bedient, funktioniert es bei mir wunderbar.

Zitat
https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=showlocation
https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=show&application=JC
https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=get device data

Das sind die normalen zyklischen Aufrufe. "get device data" ist der den wir für die meisten Daten (zum Empfang) verwenden.

Zitat
--> Die Anlage hängt sich auf. Der Code funktioniert nur wenn auch nicht
Was auch noch nicht 100%ig geht ist das Problem, dass ich es bei den Judo Szenen (die ich wirklich praktisch finde) noch immer etwas hakelig ist. Ich bekomme es nicht hin den 01.01.1970 Code einzupflegen.
Ja, sobald man über HTTPMOD bzw. direkten URL Aufruf eine andere Szene als "normal" einstellt, verhakt sich irgendwas im System. Ob bei allen Szenen oder nur manchen, weiß ich nicht.

Zitat
Hier der Auszug aus dem Logfile (mit dem ich nichts anfangen kann bzw. mir ist nicht klar was ich ändern muss, damit es funktionieren könnte).

2022.07.16 08:18:55 5: JUDO_iSoft: set called with Resthaerte 6
2022.07.16 08:18:55 5: JUDO_iSoft: set found option Resthaerte in attribute set09Name
2022.07.16 08:18:55 5: JUDO_iSoft: checkRange for SetFn checks 6 against min 1
2022.07.16 08:18:55 5: JUDO_iSoft: checkRange for SetFn checks 6 against max 10
2022.07.16 08:18:55 4: JUDO_iSoft: set will now set Resthaerte -> 6
2022.07.16 08:18:55 5: JUDO_iSoft: AddToQueue adds type set09 to URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data, no data, no headers, retry 0, initial queue len: 0
2022.07.16 08:18:55 5: JUDO_iSoft: HandleSendQueue called from AddToSendQueue, qlen = 1
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%token%), mode reading, value token input: https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace: reading value is XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2022.07.16 08:18:55 5: JUDO_iSoft: Replace: match for type set09, regex (?^:%token%), mode reading, value token, input: https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data, result is https://%JUDO_ipaddress%/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data

...

2022.07.16 08:18:55 4: JUDO_iSoft: HandleSendQueue sends set09 with timeout 5 to https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data, No Data, No Header
2022.07.16 08:18:55 5: JUDO_iSoft: ReadCallback called from __ANON__
2022.07.16 08:18:55 4: JUDO_iSoft: Read callback: request type was set09 retry 0,
header: HTTP/1.1 200 OK


Hier wird "get device data" über einen set-Befehl aufgerufen. Das scheint wenig sinnvoll und sieht nicht aus als ob das funktionieren wird.
Deine Device Definition wäre hilfreich um zu schauen.

Wenn ich etwas mehr Zeit finde, erstelle ich noch eine etwas generischere Definition. Im Moment ist schwierig.

Zitat
Ich befürchte, dass das Modul oder die Anlage oder die Kommunikation zwischen meinem Modul und Anlage nicht mehr funktioniert. Auch wenn ich im Judo-Webforntend etwas einstelle. z.B. Wasserszene Duschen, springt es zwar zunächst um, aber nach etwa 1 Minute ändert sich sie Wasserhärte. Gestern zu 12 Grad dH heute ist es 6 Grad dH.
Ein paar Stunden/Tage warten und nichts verstellen... Erholt sich (zumindest bei mir) wieder.

Zitat
Kannst Du mir Deine FHEM Definition für die Judo Logdatei sagen? Ich bekomme auch das nicht hin und muss immer mühsam im globalen Logfile nachsehen.
Verstehe die Frage nicht. Zeig mal bitte deine Device-Definition (der Inhalt von "Raw Definition" ohne die ganzen setstate's) sollte genügen. Oder ein "list JUDO_iSoft" - jeweils ohne sensible Daten.

Gruß,
Tobias
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

SebastianStorb

#46
Hallo Tobi,

ich wollte Dir noch ein Feedback und in allen Punkten Recht geben. Nachdem ich meine Experimente gelassen habe und einfach das ausprobiert habe, was Du schon herausgefunden hattest, bin ich wirklich zu Frieden!

- Die Anlage hat sich ("wie von Geisterhand") wieder erholt (24h? bzw. am nächsten Morgen), nachdem ich keine Wasserszene mehr gesendet habe.
- Wenn keine Wasserszenen gesendet werden funktioniert das einfache Ändern des Härtegrades hervorragend.

Nochmals 1000 Dank für Deine Hilfe!!!