Przed zakupem pompy ciepła skontaktowałem się z producentem jak wygląda mołżiwość integracji jego produktu z systemami automatyki domowej. Nie ma gotowej integracji ale producent sterownika pompy wystawia api w postaci json do swoich sterowników. Opis api pod adresem https://emodul.eu/docs/api-v1.txt
Po rozpracowaniu api napisałem skrypt w bash-u w celu synchronizacji danych z pc do domoticz
Wymagane jest doinstalowane w linuxie aplikacji bc i jq, np poleceniem apt install jq bc
Osoby posiadające dostęp do platormy emoduł.eu muszą w skrypcie podać dane logowania do platformy oraz udid urządzenia z którego chcą pobierać dane (szczególy w kodzie skryptu). Obecnie skrypt działa dobrzez pompą AirKompakt, acz po przeróbkach będzie też działał z innymi sterownikami firmy TECH.
Najtrudniejszym było ustalić które ID urządzenia odpowiada za którą daną wyświetlaną na stronie, niestety nie znalazłem opisu tych id wiec ręcznie wyszukiwałem po wartościach co jest co :D
zapisz poniższy skrypt gdzies na dysku linuxa z domoticz np jako pc.sh, wpisz login i haslo, adres ip domoticza oraz id urzadzeń ktore chcesz pobierać i ustaw skrypt w cronie by sie wykonywal co 5 minut koniecznie jako bash, bash pc.sh
moje ID urządzeń w domoticz, 6 temperatur i 2 energy usage:
widoczne ID sa potem użyte w wywoływaniu funkcji zapisjącej dane do domoticz.
#!/bin/bash #skrypt wymaga do dzialania zainstalowanych pakietow bc i jq czyli basic calculator i json query. # wpisz ponizej dane uzytkownika i haslo do emodułu linia autoryzacji i pobrania tokena pola user i pass auth=`curl -s -i -X POST -H "Content-Type: application/json" -d '{"username": "user", "password": "pass"}' "https://emodul.eu/api/v1/authentication"` auth=`echo "${auth//'"'}"` user=`echo $auth|awk -F "user_id:" '{print $2}'` user=`echo $user|awk -F "," '{print $1}'` token=`echo $auth|awk -F "token:" '{print $2}'` token=`echo $token|awk -F "}" '{print $1}'` #listuj urzadzenia per dany user odremuj wszystko co poniżej do #lub device=`curl -s -i -H "Content-Type: application/json" -H "Authorization: Bearer $token" "https://emodul.eu/api/v1/users/{$user}/modules"` echo $device device=`echo "${device//'"'}"` udid=`echo $device|awk -F "udid:" '{print $2}'` udid=`echo $udid|awk -F "}" '{print $1}'` echo $udid #lub podaj nr udid z strony www wycinając jak niżej # https://emodul.eu/web/56d385598119c046e9589e691337fe34/home #udid=56d385598119c046e9589e691337fe34 #wyciagnij dane dla urzadzenia mu=`curl -s -H "Content-Type: application/json" -H "Authorization: Bearer $token" "https://emodul.eu/api/v1/users/{$user}/modules/{$udid}"` #zamiana zwroconego jsona na linie z konkretnym urzadzeniem i jego parametrami js=$(echo "$mu" | jq '.tiles[] | "\(.id),\(.params.txtId),\(.params.description),\(.params.value),\(.params.workingStatus),\(.params.widget1.value),\(.params.widget2.txtId),\(.params.widget2.value)"') #funkcja do aktualizacji id w domoticz zmien ip serwera domoticz podmieniając 10.10.0.42 na swoje, pierwszy parametr do ID urzadzenia w domoticz drugi to wartość z danymi updatedomo () { url="http://10.10.0.42:8080/json.htm?type=command¶m=udevice&idx=" url+=$(echo $1) url+="&nvalue=0&svalue=" url+=$(echo $2) curl -s -H "Accept: application/json" $url } #usuniecie znaku " js=$(echo "${js//'"'}") #echo "$js" #jesli interesuja Cie wszystkie dane z pompy to odermuj ta linie i obejrzyj wynik. Nie udalo mi sie rozkodować wszystkich danych ktore id urzadzenia to ktory klocek na stronce zwłaszcza dla urządzeń universal i relay. #wyciecie z wyniku danych dla ID 1020 czyli temperatury CWU oraz podzielenie wyniku przez 10 i wysłanie go funcją do domoticz na urzadzenie z ID 519 niżej kolejne urządzenia z domoticz dwh=$(echo "$js"| grep 1020| awk -F "," '{print $4}') dwh=$(echo "scale=2; $dwh/10" | bc) #if [$dwh1 < $dwh]; then if [[ "$dwh" == *"."* ]]; then updatedomo 519 $dwh fi out=$(echo "$js"| grep 1021| awk -F "," '{print $4}') out=$(echo "scale=2; $out/10" | bc) if [[ "$out" == *"."* ]]; then updatedomo 520 $out fi aout=$(echo "$js"|grep 2225| awk -F "," '{print $4}') aout=$(echo "scale=2; $aout/10" | bc) bufup=$(echo "$js"|grep 1023| awk -F "," '{print $4}') bufup=$(echo "scale=2; $bufup/10" | bc) if [[ "$bufup" == *"."* ]]; then updatedomo 521 $bufup fi bufdown=$(echo "$js"|grep 1024| awk -F "," '{print $4}') bufdown=$(echo "scale=2; $bufdown/10" | bc) if [[ "$bufdown" == *"."* ]]; then updatedomo 522 $bufdown fi gas=$(echo "$js"|grep 1022| awk -F "," '{print $4}') gas=$(echo "scale=2; $gas/10" | bc) upsup=$(echo "$js"|grep 1028| awk -F "," '{print $4}') upsup=$(echo "scale=2; $upsup/10" | bc) if [[ "$upsup" == *"."* ]]; then updatedomo 524 $upsup fi condensat=$(echo "$js"|grep 1551| awk -F "," '{print $4}') condensat=$(echo "scale=2; $condensat/10" | bc) upsupret=$(echo "$js"|grep 1027| awk -F "," '{print $4}') upsupret=$(echo "scale=2; $upsupret/10" | bc) oil=$(echo "$js"|grep 1029| awk -F "," '{print $4}') oil=$(echo "scale=2; $oil/10" | bc) epower=$(echo "$js"|grep 1562| awk -F "," '{print $8}') epower=$(echo "scale=2; $epower*100" | bc) updatedomo 525 $epower hpower=$(echo "$js"|grep 1575| awk -F "," '{print $8}') hpower=$(echo "scale=2; $hpower*100" | bc) updatedomo 526 $hpower cop=$(echo "$js"|grep 1590| awk -F "," '{print $8}') cop=$(echo "scale=2; $cop/10" | bc) if [[ "$cop" == *"."* ]]; then updatedomo 527 $cop fi flow=$(echo "$js"|grep 1096| awk -F "," '{print $8}') compoperate=$(echo "$js"|grep 1666 | awk -F "," '{print $8}') compoperate=$(printf '%02d:%02d:%02d\n' $((compoperate/3600)) $((compoperate%3600/60)) $((compoperate%60))) compstoptime=$(echo "$js"|grep 1668 | awk -F "," '{print $8}') compstoptime=$(printf '%02d:%02d:%02d\n' $((compstoptime/3600)) $((compstoptime%3600/60)) $((compstoptime%60))) lastdefrost=$(echo "$js"|grep 1664 | awk -F "," '{print $8}') lastdefrost=$(printf '%02d:%02d:%02d\n' $((lastdefrost/3600)) $((lastdefrost%3600/60)) $((lastdefrost%60))) bufset=$(echo "$js"|grep 1521| awk -F "," '{print $4}') bufset=$(echo "scale=2; $bufset/10" | bc) if [[ "$bufset" == *"."* ]]; then updatedomo 523 $bufset fi uppersourcedelta=$(echo "$js"|grep 1538| awk -F "," '{print $4}') uppersourcedelta=$(echo "scale=2; $uppersourcedelta/10" | bc) comp=$(echo "$js"|grep 1007| awk -F "," '{print $5}') traydef=$(echo "$js"|grep 1009| awk -F "," '{print $5}') #evaporation temp id? = 3839 #wyswietlenie wszystkich urzadzen jako wynik skryptu echo DWH $dwh echo OUT $out echo AOUT $aout echo BUFFER UP $bufup echo BUFFER DO $bufdown echo GAS $gas echo OIL $oil echo UPPER SUPPLY $upsup echo UPPER SUPPLY RET $upsupret echo condensat $condensat echo EPOWER $epower echo HPOWER $hpower echo COP $cop echo bufset $bufset echo flow $flow echo uppersourcedelta $uppersourcedelta #echo VALVE $valve echo COMP $comp echo traydefrost $traydef echo compoperate $compoperate echo compstoptime $compstoptime echo lastdefrost $lastdefrost
Na samym końcu skryptu jest listowanie wszystkich danych jakie udało mi się znaleść, chcesz jakies jeszcze wrzucac do domoticz to dorób konkretne urządzenia i skorzystaj z funkcji wysyłającej podając ich id i zmienną samej wartości.
Jak ktoś znajdzie które ID w urządzeniach TECH to zawór 3 drożny DWH/Bufor to dajcie znać, ja sie poddałem :D