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 passauth=`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 $devicedevice=`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 urzadzeniamu=`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 parametramijs=$(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 danymiupdatedomo () { url="http://10.10.0.42:8080/json.htm?type=command&param=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 domoticzdwh=$(echo "$js"| grep 1020| awk -F "," '{print $4}')dwh=$(echo "scale=2; $dwh/10" | bc)#if [$dwh1 < $dwh]; thenif [[ "$dwh" == *"."* ]]; then updatedomo 519 $dwhfi
out=$(echo "$js"| grep 1021| awk -F "," '{print $4}')out=$(echo "scale=2; $out/10" | bc)if [[ "$out" == *"."* ]]; thenupdatedomo 520 $outfi
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" == *"."* ]]; thenupdatedomo 521 $bufupfi
bufdown=$(echo "$js"|grep 1024| awk -F "," '{print $4}')bufdown=$(echo "scale=2; $bufdown/10" | bc)if [[ "$bufdown" == *"."* ]]; thenupdatedomo 522 $bufdownfi
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" == *"."* ]]; thenupdatedomo 524 $upsupfi
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" == *"."* ]]; thenupdatedomo 527 $copfi
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" == *"."* ]]; thenupdatedomo 523 $bufsetfi
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 skryptuecho DWH $dwhecho OUT $outecho AOUT $aoutecho BUFFER UP $bufupecho BUFFER DO $bufdownecho GAS $gasecho OIL $oilecho UPPER SUPPLY $upsupecho UPPER SUPPLY RET $upsupretecho condensat $condensatecho EPOWER $epowerecho HPOWER $hpowerecho COP $copecho bufset $bufsetecho flow $flowecho uppersourcedelta $uppersourcedelta#echo VALVE $valveecho COMP $compecho traydefrost $traydef
echo compoperate $compoperateecho compstoptime $compstoptimeecho 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
