UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
Witam
Zaczynam zabawę z OpenHab , podchodziłem do tego parę razy i nie dawałem rady ( brak znajomości j. Angielskiego ) ale ,że kwarantanna zatrzymała mnie dłużej w domu dałem radę odpalić OH .
Potrafię już sterować przekaźnikami , odczytywać czujnik AM2301
Bardzo dużo pomógł mi translator od wujka Goggla 🙂
Zatrzymałem się na odczycie wejścia analogowego ANALOG::{"A0":....} a może dokładnie nie nad odczytem lecz na konwersji z odczytu 0 - 1024 . do np. odczytu prądu w zakresie 0A - 5A.
Jak to mogę zrobić ?
p.s
Nie mogę do tego tematu dodać *.jpg ??
Wejście analogowe w ESP8266 służy do pomiaru napięcia z zakresie od 0 do 1V (bez dzielnika)
Cyfrowy odczyt 1 = 0,0009765625 V
Oczywiście znając rezystancję odbiornika, napięcie - obliczysz prąd, natomiast ESP pójdzie z dymem przy większych prądach - nie pamiętam ilę udźwignie ale to w jakiś miliamperach max
PS. Załączniki nie można dodawać w pierwszym poście - chyba od drugiego da radę
Dzięki za odpowiedz , ale chyba źle sformułowałem moje pytanie .
Chodzi mi oto , że na nóżkę ESP ADC0 A0 podłączam ( poprzez dzielnik ) Układ ACS712 lub MH-Sensor series , na wyjściu tych układów jest odpowiednio napięcie od 0V do 5V poprzez dzielnik na układ ESP wchodzi od 0V do 1 V . Tak więc
napięcie wejściowe waha się w zakresie 0-5V, a z przetwornika ADC otrzymujemy 1024 wartości (liczymy od 0 do 1023).
Tą nazwę pomiar amperów to dałem tylko przykładowo
Czyli na sensorze zbliżania np:
1024 = 5 cm
850 = 4,15 cm
500 = 2,44 cm
350 = 1,70 cm
x= (1*5cm)/1024
1 = 0 cm
i ja taką wartość potrzebuję żeby się wyświetlała czyli wartość = (wynik*5)/1024
moje ustawienia
.sitemap
sitemap MojDom label="Mój Dom"
{
/* Switch - przełącznik */
Frame label="Pokój 1"
{
Switch item=Dioda1 icon="light"
Switch item=Dioda2 icon="light"
Switch item=Dioda3 icon="light"
Switch item=Dioda4 icon="light"
}
/* Pomiar temperatury */
Frame label="Pokój 2"
{
Text item=Termometr1 label="Temperatura Duży [%.1f °C]" icon="temperature" valuecolor=[<20="orange",>22="green",>23="red",<=24="blue"]
Text item=Wilgotnosc1 label="Wilgotność Duży [%.1f %%]" icon="Humidity"
}
/* Pomiar analogowy */
Frame label="Pokój 3"
{
Text item=Ampery icon="light"
}
}
.items
Number Ampery "Mój Amperomierz [%d mA]" { channel="mqtt:topic:Ampery:Ampery" }
.things
Thing mqtt:topic:Ampery "Wejscie Analogowe" (mqtt:broker:MosquittoMqttBroker) {
Channels:
/* */
Type number : Ampery "Amperomierz" [
stateTopic="tele/Plytka186/SENSOR",
transformationPattern="JSONPATH:$.ANALOG.A0"
]
}
Na pewno muszę coś wpisać w .rules i zmienić coś w .items
p.s żeby dodać zdjęcie muszą być dwa tematy ? Jak będę mógł przy następnej odpowiedzi dodać jpg może będzie łatwiej wytłumaczyć 🙂 , bo dalej nie mogę dodać .
ten item Ampery ma już te wartości z zakresu 0 ... 1023
Tak właśnie tam są te wartości 0 - 1024 , a ja tam potrzebuję mieć 0 cm ...... 5 cm czyli zamiast "Mój Amperomierz [%d mA]" muszę tam wstawić tą zmienna ze wzoru
wartość = ("Mój Amperomierz [%d mA]"*5)/1024
ale nie wiem jak 🙁
Zrób dodatkowy item w *.items
Number Odleglosc "Odleglosc [%.2f cm]"
import java.lang.Math.*
import org.openhab.core.library.types.DecimalType
rule "Konwersja z adc do cm"
when
Item Ampery changed
then
Odleglosc.sendCommand((Ampery.state as DecimalType)*5/1024)
end
Text item=Odleglosc
Zrobiłem tak jak pisałeś
do .sitemap dodałem
Text item=Odleglosc icon="incline"
Utworzyłem
Odleglosc.items
Number Odleglosc" Odleglosc [%.2f cm]" - po Number Odleglosc ma być spacja ? czy tak jak jest bez spacji " Odleglosc [%.2f cm]" ?
Utworzyłem
Ampery.rules ( Nie wie czy dobrze rozumuje )
import java.lang.Math.* ( Muszę coś doinstalować ?Co to jest ? )
import org.openhab.core.library.types.DecimalType ( Muszę coś doinstalować ? Co to jest ?)
rule "Konwersja z adc do cm" ( Nazwa reguły - tylko dla mojej wiedzy czy gdzieś ta nazwa będzie potrzebna )
when (Kiedy
Item Ampery changet wartość Ampery się zmieni np. logi Ampery changed from 353 to 213
then wtedy
Odleglosc.sendCommand((Ampery.state asDecimalType)*5/1024) wartość Odleglosc będzie = to co w (Ampery)*5/1024 )
end
Przy uruchomieniu tej reguły w log-ach
2020-12-11 10:57:38.020 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'Ampery.rules' has errors, therefore ignoring it: [9,39]: extraneous input 'asDecimalType' expecting ')'
2020-12-11 10:57:27.284 [vent.ItemStateChangedEvent] - Ampery changed from 910 to 877
inna regułę jak uruchamiam
2020-12-11 10:57:27.773 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'VoiceControl.rules'
Na ekranie brak wartości w Odleglosc
@budziolesp wklej tutaj dokładnie co wprowadziłeś bo mixujesz w treści swoje pytania, jakieś zmany i nie wiem co tam masz w kodzie na koniec wpisane i z jakiego powodu nie działa
Dzięki za pomoc , nie wiem co źle skopiowałem , ale działa .Twoja podpowiedz zbliży mnie do dalszego programowania .
Próbowałem też robić po swojemu zrobić to co chciałem ,ale jest jedno "ale" , a mianowicie odległość pokazuje mi w cm , ale tylko raz przy ponownym pomiarze odległości zmienia się tylko zmienna analogowa ( czyli u mnie pomiar )
A zrobiłem to tak :
mojDom.sitemap
sitemap MojDom label="Mój Dom"
{
Frame label="Pokój 1"
{
Switch item=Dioda1 icon="light"
Switch item=Dioda2 icon="light"
Switch item=Dioda3 icon="light"
Switch item=Dioda4 icon="light"
}
/* Switch - przełącznik */
Frame label="Pokój 2"
{
Text item=Termometr1 label="Temperatura Duży [%.1f °C]" icon="temperature" valuecolor=[<20="orange",>22="green",>23="red",<=24="blue"]
Text item=Wilgotnosc1 label="Wilgotność Duży [%.1f %%]" icon="Humidity"
}
/* pomiar odległości */
Frame label="Pokój 3"
{
Text item=Pomiar icon="light"
Text item=Odleglosc icon="incline"
}
}
Pomiar.items
Number Pomiar "Wartość Analogowa [%d A0]" { channel="mqtt:topic:Ampery:Ampery" }
Odleglosc.items
Number Odleglosc" Odleglosc [%.1f cm]"
pomiar.rules
var Number x = Pomiar.state
var Number cm
var Number wartosc = 5
rule"Konwersja_z_adc_do_cm"
when
Item Pomiar changed
then
cm = ( x * wartosc ) / 1024
sendCommand(Odleglosc , cm)
end
logi
2020-12-11 13:40:42.329 [vent.ItemStateChangedEvent] - Pomiar changed from 1024 to 32
2020-12-11 13:40:42.792 [ome.event.ItemCommandEvent] - Item 'Odleglosc' received command 0.15625000
2020-12-11 13:40:42.799 [vent.ItemStateChangedEvent] - Odleglosc changed from NULL to 0.15625000
Tu widać jak pomiar jest 32 a odleglosc 0,15
przy następnym pomiarze
020-12-11 13:42:52.275 [vent.ItemStateChangedEvent] - Pomiar changed from 1024 to 883
2020-12-11 13:42:52.289 [ome.event.ItemCommandEvent] - Item 'Odleglosc' received command 0.15625000
2020-12-11 13:43:02.287 [vent.ItemStateChangedEvent] - Pomiar changed from 883 to 1024
2020-12-11 13:43:02.295 [ome.event.ItemCommandEvent] - Item 'Odleglosc' received command 0.15625000
Pomiar się zmienia ale odleglosc pozostaje taka sama
A powiedz mi co to jest ? Co to robi ?
import java.lang.Math.*
import org.openhab.core.library.types.DecimalType
dodatkowe biblioteki, które czasami są potrzebne, żeby robić nie standardowe działania
np, to
Ampery.state as DecimalType
wymaga:
import org.openhab.core.library.types.DecimalType
ta potencjalnie może zostac usunięta: import java.lang.Math.*
nie chciało mi się sprawdzać 😉
W tym Twoim X będzie zawsze miało jedną wartość, nie zmieni się, wiec nie zadziała
rule"Konwersja_z_adc_do_cm"
when
Item Pomiar changed
then
cm = ( x * wartosc ) / 1024
sendCommand(Odleglosc , cm)
end
bo to coś
var Number x = Pomiar.state
zapisze do X wartośc Pomiar.state jak zapiszesz plik lub ponownie uruchomisz OH2